QGraphicsView提供一个显示QGraphicsScene内容的窗口,该窗口可以滚动,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置view的场景,然后调用了show()函数后,view就可以默认的在场景的中心,显示item,例如

QGraphicsScene scene;

 scene.addText("Hello, world!");

 QGraphicsView view(&scene);

 view.show();

可以使用鼓动调来调节查看场景的位置,或者调用centerOn(),视图会把传进去的点参数作为中心

通过调用render()视图会显示场景scene,默认的,items使用QPainter来绘制到视口上,使用默认的绘图设置,改变绘制item时候视图传递的QPainter性质,可以调用setRenderHints()。

默认的,视图view提供给视口一个普通的QWidget,可以调用viewPort()来或得视口,也可以调用setViewport()来替换掉视口widget,使用OpenGL来作为视口,可以简单的setViewport(QGLWidget),由view对视口进行负责管理

视图view可以转换,使用QTransform或者直接调用rotate(), scale(), translate() or shear().

我们可以用鼠标或者键盘来和场景中的item进行交互,QGraphicsView把鼠标和键盘事件传递给场景scene

视图view提供转换函数,例如mapToScene()和mapFromScene(),获取items通过调用items()和itemAt(),这些函数用来在视图坐标和场景坐标之间转换点,线,矩形,多边形,和路径,在视图坐标中找到items.

1、void QGraphicsView::setScene ( QGraphicsScene * scene )

设置当前场景为scene,如果场景已经被查看,这个函数什么都不做

当一个场景被设置到一个view上后,信号QGraphicsScene::changed() 被发射,自动绑定到这个view的updateScene() 槽,view的滚动条调整到适合场景scene的大小

2、CacheMode QGraphicsView::cacheMode () const

void QGraphicsView::setCacheMode ( CacheMode mode )

这个属性控制view的那一部分现在在缓存中,QGraphicsView可以预存一些内容在QPixmap中,然后被绘制到viewpoint上,这样做的目的是加速整体区域重绘的速度,例如,质地,倾斜度,和最初的混合背景可能重绘很缓慢,尤其是在一个变形的view中, CacheBackground标志使能view的背景缓存,例如

QGraphicsView view;

view.setBackgroundBrush(QImage(":/images/backgroundtile.png"));

view.setCacheMode(QGraphicsView::CacheBackground);

每次view转换后cache就无效了,然而,当滚动区域时候,只有部分无效

默认的,没有使用cache

3、viewportUpdateMode : ViewportUpdateMode

void  setViewportUpdateMode ( ViewportUpdateMode mode )

这个属性控制着viewport应该如何刷新他的内容

QGraphicsView 使用这个属性来决定当场景改变或者暴露时候如何刷新场景的区域,通常不需要修改这个属性,但是在有些情况下做这个工作可以改进绘图性能,详细特定的可以参看ViewportUpdateMode 文档

默认的值是 MinimalViewportUpdate,当内容改变时候QGraphicsView将会刷新尽可能小的视图点。

4、ViewportAnchor         transformationAnchor () const

void  setTransformationAnchor ( ViewportAnchor anchor )

ViewportAnchor这个属性控制着当转换时候view应该如何摆放场景的位置

QGraphicsView使用这个属性来决定当转换矩阵修改和坐标系统修改时候如何摆放场景的在viewport中的位置,默认的是 AnchorViewCenter,这样使场景点在变换时候保持在view中心点不变(例如:当旋转时候,场景将会围绕着view中心点来旋转)

只有场景中的一部分可见时候这个属性才显而易见的。例如:当view中有滚动条时候,否则整个场景都在view中,场景将会使用QGraphicsView::aligenment来摆放它的位置

5、void QGraphicsView::scale ( qreal sx, qreal sy )

缩放当前的view,比例是sx,sy

6、void QGraphicsView::resetCachedContent ()

重新设置缓冲区的内容,调用这个函数将会清空缓冲区的内容,如果当前缓冲模式是CacheNone,那这个函数什么都不做,当backgroundBrush 或者QGraphicsScene::backgroundBrush改变时候,这个函数会自动调用,如果你重写了QGraphicsScene::drawBackground() 或者 QGraphicsView::drawBackground()调用这个函数,来触发重画绘制一个背景。

7、void QGraphicsView::render ( QPainter * painter, const QRectF & target = QRectF(), const QRect & source = QRect(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio )

将视图中source rect的内容打印到target rect上,使用painter,这将在一个绘图设备上完成,例如QImage,或者QPrinter.

8/、当场景改变时时候,场景发射信号QGraphicsScene::sceneRectChanged().

由视图槽函数void QGraphicsView::updateSceneRect ( const QRectF & rect )   [slot]接受,

Rect是最新的场景区域,如果view已经有了一个明确的场景scene的矩形,这个函数不起作用

原文链接: http://blog.csdn.net/seanyxie/article/details/6008810

QGrapicsView类的更多相关文章

  1. pyqt-QGrapicsView类

    QGrapicsView类 QGraphicsView提供一个显示QGraphicsScene内容的窗口,该窗口可以滚动,可以在构造时候把场景对象作为参数,或者之后使用setScene()来设置vie ...

  2. QGrapicsItem类

    这个类翻译了好久,实在是成员函数太多了,分享出来,希望对大家有用,多多支持哦~~ 详细介绍 QGraphicsItem类是视图框架的一部分,是在一个QGraphicsScene中最基本的图形类,它为绘 ...

  3. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  4. pyqt5的使用目录

    pyqt5的安装 我的第一个例子 标签控件QLabel的使用   按钮QPushButton 信号与槽 pyqt5模块介绍 pycharm活动模板  QObject 定时器  QWidget类-坐标系 ...

  5. QT学习笔记4:QT中GraphicsView编程

    一.QGraphicsScene 1.QGraphicsScene QGraphicsScene继承自QObject,是一个管理图元的容器,与QGraphicsView合用可以在2D屏幕上显示如线.三 ...

  6. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  7. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  9. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

随机推荐

  1. 把RedisWatcher安装为windows服务

    安装完成后, 到安装目录下修改watcher.conf.注意,任何路径都不可包含空格,中文,特殊字符,且全部使用绝对路径配置文件中文注释exepath --> redis-server.exe的 ...

  2. Mac下 javac java 进行编译和运行含有包路径及引入jar包的类

    近两天因为刚入职,属于熟悉环境的阶段,研究了下算法(第四版),当不使用IDE工具直接使用终端进行javac 编译带有包的类,然后使用java 会出现如下错误提示: 使用谷歌搜索了很久,终于找到解决的办 ...

  3. dobbo 简单框架

  4. BZOJ 5312: 冒险

    首先我们考虑,对于And 和 Or 操作,对于操作位上只有And 0 和 Or 1 是有效果的. 我们注意到如果区间内需要改动的操作位上的数字都相同,那么是可以区间取与以及区间取或的. 那其实可以维护 ...

  5. PAT 天梯赛 L1-048. 矩阵A乘以B 【数学】

    题目链接 https://www.patest.cn/contests/gplt/L1-048 题意 给出两个矩阵,先判断两个矩阵能不能相乘,如果可以,就输出相乘 结果,如果不行 则按格式输出erro ...

  6. POJ - 3662 Telephone Lines (Dijkstra+二分)

    题意:一张带权无向图中,有K条边可以免费修建.现在要修建一条从点1到点N的路,费用是除掉免费的K条边外,权值最大的那条边的值,求最小花费. 分析:假设存在一个临界值X,小于X的边全部免费,那么此时由大 ...

  7. HDU4639

    /*计算里面有多少个相邻的he,1个he就是1种意思,两个就是,两种,所以这是 一个斐波拉期数列,间隔的hehe互不影响所以是互斥事件,直接相乘就可以*/ #include<stdio.h> ...

  8. 20145201 实验四 Andoid开发基础

    20145201 实验四 Andoid开发基础 AndroidStudio安装 首先设置环境变量: Windows环境下Android Studio v1.0安装: 安装完毕. 运行Andriod S ...

  9. NGINX的IO模型详解

    普及: 用户空间与内核空间: 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的 ...

  10. 什么是webhook

    什么是webhook 翻译,原文地址:https://sendgrid.com/blog/webhook-vs-api-whats-difference/ 一.概述 Webhook是一个API概念,并 ...