QGraphicsScene入门一:基本介绍、场景定义、添加元素

简介说明:

    这个QGraphicsScene类用于在场景中操作大量的2D图形元素,这个类是作为一个容器QGraphicsItems存在的,它是连同QGraphicsView用于可视化的二维表面的图形项目,如直线,矩形,文本,甚至定制物品;还可以有效地确定元素在场景中的位置以及控制元素的时显示区域及方式。配合QGraphicsView你可以可视化整个场景、或方大缩小或只显示一部分等...

    首先来把 QGraphicsView, QGraphicsScene 改个称呼:
    QGraphicsScene 称为图形场景。
    QGraphicsView 称为图形窗口。
    你可以理解为 QGraphicsScene图形窗口 就是可视化的界面,就如同是一台电视机的外壳,QGraphicsScene图形场景 为电视机的屏幕。而要播放的内容是要在屏幕里显示出来的。
    注意:QGraphicsScene图形窗口 都有自己的无视觉外观,它只管理项目。你需要创建一个QGraphicsView图形视图 加载 部件可视化的场景。

示例一:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#示例一:
__author__  =  'liaojie'
#!/usr/bin/env python
#coding:utf-8
from  PyQt5.QtWidgets  import  (QGraphicsView,QGraphicsScene,QApplication)
if  __name__  = =  '__main__' :
     import  sys
     #每个PyQt程序必须创建一个application对象,sys.argv 参数是命令行中的一组参数
     #注意:application在 PyQt5.QtWidgets 模块中
     #注意:application在 PyQt4.QtGui 模块中
     app  =  QApplication(sys.argv)
     #创建场景
     scene  =  QGraphicsScene()
     #在场景中添加文字
     scene.addText( "Hello, world!" )
     #创建窗口,并将场景加载到窗口中
     view  =  QGraphicsView(
     #显示应用
     view.show()

示例二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#示例二:
__author__  =  'liaojie'
#!/usr/bin/env python
#coding:utf-8
from  PyQt5.QtWidgets  import  (QGraphicsView,QGraphicsScene,QApplication)
class  MainWindow(QGraphicsView):
     def  __init__( self ,parent = None ):
         super (MainWindow,  self ).__init__(parent)
         #创建场景
         self .scene  =  QGraphicsScene()
         #在场景中添加文字
         self .scene.addText( "Hello, world!" )
         #将场景加载到窗口
         self .setScene( self .scene)
if  __name__  = =  '__main__' :
     import  sys
     #每个PyQt程序必须创建一个application对象,sys.argv 参数是命令行中的一组参数
     #注意:application在 PyQt5.QtWidgets 模块中
     #注意:application在 PyQt4.QtGui 模块中
     app  =  QApplication(sys.argv)
     #创建桌面窗口
     mainWindow  =  MainWindow()
     #显示桌面窗口
     mainWindow.show()
     sys.exit(app.exec_())



   最后sys.exit(app.exec_())让应用程序的主事件循环。事件处理从这里开始。主事件循环从窗口系统接收事件并分发到应用程序的窗口部件上。当主事件循环结束,如果我们调用 exit() 方法或者主窗口部件被销毁。 sys.exit() 方法确保干净的退出。将通知环境应用程序是如何结束的。 

    你是否想知道为什么 exec_() 方法会有下划线,一切皆有含义,这显然是因为exec是Python的关键字,因此,用 exec_() 来取代它。

    要想将元素添加到场景中,首先你必须构建一个 QGraphicsScene图形场景,然后通过调用addItem()将元素添加到你构建的QGraphicsScene图形场景中。QGraphicsScene图形场景还有很多相当便利的方法,如:addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(),addText()等。所有添加的元素都具有他的尺寸和相对于场景的坐标系,元素初始化位置为所在场景中的(0,0)。

    然后,使用QGraphicsView图形窗口来加载QGraphicsScene图形场景,就可以看到你在场景中添加的元素啦。当场景变化时,(例如,当一个元素移动或变换)QGraphicsScene图形场景发出的changed()信号。如果要删除场景中的某个元素用removeItem()。

    QGraphicsScene图形场景使用一个索引算法来管理元素的位置。默认情况下,一个BSP(二进制空间划分)树被使用;应用于场景中的静态元素(即不走动)的算法。您可以通过调用setItemIndexMethod()来禁用该索引。有关可用的索引算法的详细信息,请参阅itemIndexMethod属性。

    QGraphicsScene图形场景的边界矩形是通过调用setSceneRect()来进行设置的,场景是可以被放在QGraphicsView图形窗口中的任何位置的。并且场景的默认大小是无限制的(即可超出QGraphicsView图形窗口的大小的,这时窗口就会出现上下左右的滚动条)。这个QGraphicsScene图形场景中的RECT仅针对场景内部不包含外层的QGraphicsView图形窗口(QGraphicsView图形窗口有自己的RECT)。在QGraphicsScene图形场景大小范围内的元素才会被看到即RECT上下左右范围内的。可以通过itemsBoundingRect()来得知现在场景的大小。

    注意:itemsBoundingRect()是一个比较耗时的功能,它的运作通过收集场景中所有元素的位置信息找出其中最远坐标的位置。所以最好先设置好自己的场景大小不要使用默认大小。

    QGraphicsScene图形场景最大的优势是它能够有效的确定元素的位置。即便是在有着数以百万计的元素时通过items()函数可以在几毫秒内确定元素的位置。


items()
将返回所有可见元素在场景中的位置pos。该列表是按递减的Z-value顺序(即,在列表中的第一条是最顶层的元素,最后一条是最底层的元素)。还有一个itemAt()函数是返回给定位置的最上方元素。
itemAt()
返回指定的位置的元素,如果这个位置上没有元素返回结果可能为0条,

注:最上面的元素是一个具有最高的Z-value。


http://www.360doc.com/content/14/1024/11/10724725_419438695.shtml

猜你喜欢

转载自blog.csdn.net/wishfly/article/details/79356053