qt Graphics View Framework(非重点)

Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互;还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转。

说明;Graphics View 框架包含了一套完整的事件体系,可以用于与场景中的元素进行双精度的交
互。这些元素同样支持键盘事件、鼠标事件等。 Graphics View 使用了 BSP 树(Binary Space
Partitioning tree,这是一种被广泛应用于图形学方面的数据结构)来提供非常快速的元素发
现,也正因为如此,才能够实现一种上百万数量级元素的实时显示机制。

版本说明:Graphics View 最初在 Qt 4.2 引入,来取代 Qt 3 中的 QCanvas。当然,在最新的 Qt5 中,Qt3 的代码已经不能继续使用了(尽管在一定程度上, Qt4 还是可以使用这些遗留代码)。

信息说明:Graphics View 是一个基于元素(item)的 MV 架构的框架。它可以分成三个部分:元素 item、场景 scene 和视图 view 。

原理说明:

"""

基于元素的意思是,它的每一个组件都是一个独立的元素。这是与我们之前讲到过的

QPainter 状态机机制不同。回忆一下,使用 QPainter 绘图,大多是采用一种面向过程的描

述方式:首先使用 drawLine()画一条直线,然后使用 drawPolygon()画一个多边形。对于

Graphics View,相同的过程可以是,首先创建一个场景(scene),然后创建一个直线对象

和一个多边形对象,再使用场景的 add()函数,将直线和多边形添加到场景中,最后通过视

图进行观察,就可以看到了。乍看起来,后者似乎更加复杂,但是,如果你的图像中包含了

成千上万的直线、多边形之类,管理这些对象要比管理 QPainter 的绘制语句容易得多。并

且,这些图形对象也更加符合面向对象的设计要求:一个很复杂的图形可以很方便的复用。

MV  架构的意思是,Graphics View  提供一个  model  和一个  view (正如  MVC  架构,只不

过  MV  架构少了  C  这么一个组件)。所谓模型(model)就是我们添加的种种对象;所谓

视图(view )就是我们观察这些对象的视口。同一个模型可以由很多视图从不同的角度进行

观察,这是很常见的需求。使用  QPainter  很难实现这一点,这需要很复杂的计算,而

Graphics View  可以很容易的实现。

Graphics View  提供了 QGraphicsScene 作为场景,即是允许我们添加图形的空间,相当于

整个世界;QGraphicsView 作为视口,也就是我们的观察窗口,相当于照相机的取景框,

这个取景框可以覆盖整个场景,也可以是场景的一部分;QGraphicsItem 作为图形元件,

以便添加到场景中去,Qt  内置了很多图形,比如直线、多边形等,它们都是继承自

QGraphicsItem 。

"""

from PyQt4.QtGui import  *

from PyQt4.Qt import *

from PyQt4 import QtGui, QtCore

from PyQt4.QtCore import *

import sys

def main():

app = QtGui.QApplication(sys.argv)

scene=QGraphicsScene()

scene.addLine(0,0,150,150)

view=QGraphicsView(scene)

view.setWindowTitle(‘Graphics View‘)

view.resize(500,500)

view.show()

sys.exit(app.exec_())

if __name__ == ‘__main__‘:

main()

如图:

----------------------

# -*- coding: utf-8 -*-

# python:2.x

__author__ = ‘Administrator‘

from PyQt4.QtGui import  *

from PyQt4.Qt import *

from PyQt4 import QtGui, QtCore

from PyQt4.QtCore import *

import sys

def main():

app = QtGui.QApplication(sys.argv)

scene=QGraphicsScene()#首先创建一个场景,也就是 QGraphicsScene 对象

scene.addLine(0,0,150,150)#addLine()函数向场景中添加了一个直线

scene.setSceneRect(0, 0, 300, 300)

#起始点和终点坐标分别是  (0,  0)  和  (150, 150)

view=QGraphicsView(scene)#GraphicsView 对象,绑定到一个场景上

#QGraphicsScene 不是 QWidget 的子类,因此该构造函数并不是调用的 QGraphicsView(QWidget  *parent)

view.setWindowTitle(‘Graphics View‘)

#view.resize(500,500)

view.show()

sys.exit(app.exec_())

if __name__ == ‘__main__‘:

main()

""""

去掉了 view.resize()一行。QGraphicsScene 的 sceneRect 属性供

QGraphicsView 确定视图默认的滚动条区域,并且协助 QGraphicsScene 管理元素索引。

之所以去掉 view.resize()一行,是因为我们让系统去决定视图的最小尺寸(否则的话,我

们需要手动将窗口标题栏等的大小同时考虑设置)。

"""

如图

qt Graphics View Framework(非重点)

时间: 2024-10-20 08:36:50

qt Graphics View Framework(非重点)的相关文章

Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)

最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/View是他认为Qt中最不好的一部分了.真的是这样吗?为了回馈开源社区,我写了这篇blog,写的是我认为比较有价值的东东.题目起得是解析,但也没有特别细节的介绍,点到为止,有兴趣的Tx可以继续讨论.我所看的资料有<C++ GUI Programming with Qt 4, Second Edition

【转】Qt Mode/View 初涉

1.view与Widget     在UI中,最常用的就是list/grid/tree了(在Qt中,grid被称为table).尤其是做那些数据库相关的程序,可能每个界面都要用到 list或grid.在Qt中,它们被归为item view class.有两种实现,一种叫item based,这些类名以widget结尾,如QListWidget等.另一种叫model based,这些类以view结尾,如QListView等.     item based widget使用起来很简单,与MFC中的C

【转】Qt Mode/View

1.view与Widget 在UI中,最常用的就是list/grid/tree了(在Qt中,grid被称为table).尤其是做那些数据库相关的程序,可能每个界面都要用到 list或grid.在Qt中,它们被归为item view class.有两种实现,一种叫item based,这些类名以widget结尾,如QListWidget等.另一种叫model based,这些类以view结尾,如QListView等. item based widget使用起来很简单,与MFC中的CListCtrl

The Graphics View Coordinate System(Qt翻译)

Graphics View以笛卡尔坐标系为基础,items在scene上的位置和几何结构由x坐标和y坐标表示.当我们用未转置的view来观察scene时,scene中的一个单元由屏幕中的一个像素表示. 注:由于Graphics Views使用Qt的坐标系,y轴反向(y轴正方向向上)的坐标系是不支持的. Graphics View中有三个实用的坐标系:item坐标系.scene坐标系和view坐标系. 为了简化坐标系相关代码,Graphics View提供了便捷的函数,以方便在三个坐标系间转换.

pyqt5 graphics view简单使用

Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功能.图元可以处理关键事件,鼠标按下,移动,释放和双击事件,还可以跟踪鼠标移动. Graphics View使用BSP(二进制空间分区)树来提供非常快速的图元发现,因此,即使有数百万个图元,它也可以实时显示大型场景. 先说一下这里面的坐标系: 图形视图基于笛卡尔坐标系(平面直角坐标系x.y轴); 场景

qt model/view 架构自定义模型之QStringListModel

# -*- coding: utf-8 -*- # python:2.x #QStringListModel #QStringListModel 是最简单的模型类,具备向视图提供字符串数据的能力. #QStringListModel 是一个可编辑的模型,可以为组件提供一系列字符串作为数据. #看作是封装了 QStringList 的模型.QStringList 是一种很常用的数据类型,实际上 #是一个字符串列表(也就是 QList<QString>).既然是列表,它也就是线性的数据结构, #因

qt model/view 架构基础介绍之QTreeWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

qt model/view 架构基础介绍之QTableWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

qt model/view 架构基础介绍之QListWidget

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt import * from PyQt4 import QtGui, QtCore from PyQt4.QtCore import * import sys # MVC是Model-View-Controller的简写,即模型-视图-控制器 #model/view框架将传统的mv模型分