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(非重点)的更多相关文章

  1. Qt 学习之路 2(30):Graphics View Framework

    Qt 学习之路 2(30):Graphics View Framework 豆子 2012年12月11日 Qt 学习之路 2 27条评论 Graphics View 提供了一种接口,用于管理大量自定义 ...

  2. Qt 之 Graphics View Framework 简介

    Graphics View Framework 交互式 2D 图形的 Graphics View 框架概述.自 Qt4.2 中引入了 Graphics View,以取代其前身 QCanvas.Grap ...

  3. 关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题

    之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮.复选框.单选框等),常使用的场景类接口如下: Q ...

  4. Qt 学习之路:Graphics View Framework

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

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

    最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...

  6. Qt Model/View(官方翻译,图文并茂)

    http://doc.trolltech.com/main-snapshot/model-view-programming.html 介绍 Qt 4推出了一组新的item view类,它们使用mode ...

  7. 【转】Qt Mode/View

    1.view与Widget 在UI中,最常用的就是list/grid/tree了(在Qt中,grid被称为table).尤其是做那些数据库相关的程序,可能每个界面都要用到 list或grid.在Qt中 ...

  8. pyqt5 graphics view简单使用

    Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功 ...

  9. Qt's Undo Framework

    Overview of Qt's Undo Framework Introduction Qt's Undo Framework is an implementation of the Command ...

随机推荐

  1. UVA 825 Walking on the Safe Side(记忆化搜索)

      Walking on the Safe Side  Square City is a very easy place for people to walk around. The two-way ...

  2. [Redux] Redux: Extracting Container Components -- AddTodo

    Code to be refactored: const AddTodo = ({ onAddClick }) => { let input; return ( <div> < ...

  3. 多路复用I/O poll()

    1.基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制.poll和selec ...

  4. Android实现左右滑动效果

    本示例演示在Android中实现图片左右滑动效果.   关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来 ...

  5. XMLHttpRequest取得响应

    RresponseText:获得字符串形式的响应数据 responseXML:获得XML形式的响应数据 status和statusText:以数字和文本形式返回HTTP状态码 getAllRespon ...

  6. javascript将毫秒还原为可读时间格式

    <script type="text/javascript"> //随便设置一个时间 var otime = new Date("2015-11-11 20: ...

  7. asp.net中的主题

    用了更方便,在.net网站上,右键,选择添加主题,然后命一个名子,如果,有四个主题, 只需要在web.config的page节里加上styleSheetTheme="Red",就会 ...

  8. 一个Banner广告收缩效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. hdu3714 三分

    Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  10. VC++函数(win32_exe)

    1.windows输出,以对话框的方式. int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in ...