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(非重点)的更多相关文章
- Qt 学习之路 2(30):Graphics View Framework
Qt 学习之路 2(30):Graphics View Framework 豆子 2012年12月11日 Qt 学习之路 2 27条评论 Graphics View 提供了一种接口,用于管理大量自定义 ...
- Qt 之 Graphics View Framework 简介
Graphics View Framework 交互式 2D 图形的 Graphics View 框架概述.自 Qt4.2 中引入了 Graphics View,以取代其前身 QCanvas.Grap ...
- 关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题
之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮.复选框.单选框等),常使用的场景类接口如下: Q ...
- Qt 学习之路:Graphics View Framework
Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互:还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转.我们通常所说的 Linux 的 KD ...
- Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)
最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...
- Qt Model/View(官方翻译,图文并茂)
http://doc.trolltech.com/main-snapshot/model-view-programming.html 介绍 Qt 4推出了一组新的item view类,它们使用mode ...
- 【转】Qt Mode/View
1.view与Widget 在UI中,最常用的就是list/grid/tree了(在Qt中,grid被称为table).尤其是做那些数据库相关的程序,可能每个界面都要用到 list或grid.在Qt中 ...
- pyqt5 graphics view简单使用
Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功 ...
- Qt's Undo Framework
Overview of Qt's Undo Framework Introduction Qt's Undo Framework is an implementation of the Command ...
随机推荐
- stardict词典(星际译王)
sudo apt-get install stardict 下载词库: http://abloz.com/huzheng/stardict-dic/zh_CN/ 把下载的压缩包解压,以a为例cd /u ...
- Mysql--mysqldump命令 备份数据库
mysqldump命令用来备份数据库. mysqldump命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下执行. 1) 导出整个数据库(导出文 ...
- (转)iOS7界面设计规范(10) - UI基础 - 文字排版与配色
明天就是周四了.貌似前几天还在恨周一呢.话说今天几乎开了一整天的会,正经事情没做多少:这种感觉比一整天从早到晚12个小时的忙碌于一件事情还要让人感到疲惫的对叭?那今天的iOS7设计规范更新又是一篇很简 ...
- <Win32_6>程序员求爱的创意程序^_^
作为程序员,我们时常被外界误认为很闷.不浪漫.没创意……等等这一类人,这让我们实在有些感伤啊,我得为程序员呐喊一声: 我们也能可以欢快.浪漫.有创意…… 朋友,你向女生表白过吗? …… 这个问题有点儿 ...
- 事关Animation Tree的工作随笔(二)
上回说到,游戏项目中客观会遇到逻辑状态的复杂性和动画状态的单一性之间的矛盾,那么Animation Tree是如何解决这个问题的呢? 这又需要引入一个定律:就是逻辑状态无论有多么复杂,但一套逻辑状态组 ...
- EasyUI layout动态设置Split属性
switch (rowData.ISREGISTERTASK) { case 0: 显示north分割线 $('#RightContent').la ...
- Ubuntu + hadoop2.6.0下安装Hive
第一步:准备hive和mysql安装包 下载hive 1.1.1 地址:http://www.eu.apache.org/dist/hive/ 下载Mysql JDBC 5.1.38驱动:http:/ ...
- .net简单页面后台绑定下拉框,按钮,分页 前台aspx页面
一.aspx页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Updat ...
- oc随笔五:NSArray
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- mysql索引之普通索引
1,普通索引的创建 普通索引可以在建表的时候创建 sql : create table temp2(id int(10) not null auto_increment ,title varchar( ...