QGrapicsScene类(转贴)

概述

QgraphicsScene类为管理大量的2D图形item提供了一个管理界面,做为item的容器,它配合使用QgraphicsView使用来观察items,例如线,矩形,文本或者自定义的items,

QgraphicsScene提供了方便的函数来让你高效的找到items的位置,或者决定在scene上哪个item可以看到,配合QgraphicsView窗口,你可以让可见scene,或者缩放场景来可见一部分

例如:

QGraphicsScene scene; scene.addText("Hello, world!");  QGraphicsView view(&scene); view.show();注意:QgraphicsScene场景没有自己可见的外观,他只管理items,需要创建一个QgraphicsScene窗口来让场景可见。

添加item到场景中,可以在构造场景对象时候,或者之后通过addItem()添加一个存在的item对象,或者调用方便的函数addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(), or addText(),将会返回一个新添加的item的指针,添加到场景中的item大小和item本地坐标系统有关,初始化位置在场景中的(0,0)

当场景改变时候,例如转换item或者删除item时候,场景QgrapbhicsScene会发射change()信号,删除item,可以调用removeItem()

QgrapbhicsScene使用下标来高效的管理item的位置,默认的使用BSP树,适用于一个大型的场景,其中的item都是静止不变的,可以选择调用setItemIndexMethod().来禁用下标,可是查看itemIndexMethod来获取更多的信息

场景的边界可以使用setSceneRect()来设置,item可以放置在场景中任何位置,场景默认的大小是不受限制的,场景的矩形只用来做内部的簿记,管理场景中的item下标,如果场景矩形没有设置,QgrapbhicsScene将会使用所有item图元的边界,使用函数itemsBoundingRect()返回

QgrapbhicsScene一个巨大的功能是他可以高效的找到items的位置,即便是场景中有上百万个item,items()函数可以在数微秒内找到item的位置,items()有一些重载函数(省略)

ItemAt()函数可以根据提供的位置返回所在位置处的最上层的item

QgrapbhicsScene包含了场景的选择信息,选择items,可以使用setSelectionArea(),清除当前选择可以使用clearSelection(),调用selectedItems()来获取已经选择的items

事件处理和传播

QgrapbhicsScene另外一个责任是传播从QgraphicsView来的事件,发送事件给场景scene,可以继承QEvent构建一个事件,然后使用QApplication::sendEvent()来传递,event()函数负责分发给各个独立的items,一些普通的事件可以使用方便的事件处理函数,例如keyPressEvent()和mousePressEvent()

键盘事件发送给当前选择的item,设置选择的item,可调用setFocusItem(),将要选择的item作为参数传递进去,或者item自己调用函数QgraphicsItem::setFocus(),调用focusItem()来获取当前的选择的item,为了窗口的兼容性,场景也获取它自己的获取光标的信息,默认的,场景没有焦点,键盘事件也被忽略,如果函数setFocus()调用了,或者场景中一个item图元获得了焦点,场景也自动的获得了焦点,然后场景的hasFocus()函数返回真,键盘事件将会发送给选择的那个item,当场景丢失了focus,但是其中的item获得了焦点,那么这个场景也将获得这个item的焦点信息,如果场景要重新获取焦点,它将会把上次获得焦点的item重新获得item

对于鼠标移动效果,QgrapbhicsScene传递鼠标悬浮事件,如果其中的item设置了接受QGraphicsItem::acceptHoverEvents()事件(默认是忽略该事件的),它将会收到GraphicsSceneHoverEnter事件,GraphicsSceneHoverMove,GraphicsSceneHoverLeave事件

所有的鼠标事件都传送给当前鼠标拖动的那个item,当然也要item设置接受鼠标事件,看QGraphicsItem::acceptedMouseButtons(),

可以调用QGraphicsItem * QGraphicsScene::mouseGrabberItem () const 来查看当前选择的item,该函数会返回选择的item的指针。

,

 

1、QGraphicsScene::setItemIndexMethod ( ItemIndexMethod method )

用来设置场景中item的下标的方法,QGraphicsScene对场景应用一个index算法,来加速查询item,例如items()和itemAt(),下标对于静态的场景很有用,对动态的场景,或者场景中有很多动画项目(animated items),使用下标来寻找item就不行了

一般情况下,默认的下标使用BSP树就能很好的工作,如果你的场景中使用了很多动画,可以禁用下标通过调用setItemIndexMethod(QGraphicsScene::NoIndexNoIndex)

2、QGraphicsScene::setSceneRect(const QRectF & rect)

用来设置场景的矩形区域,限定场景的边界

这个矩形限定了场景的范围,它首先使用QGraphicsView来确定试图的可卷动区域,使用QGraphicsScene来管理item下标

如果不设定矩形区域,或者设置一个空的矩形,QRect QGraphicsScene::FsceneRect() const会返回最大的边界,场景中所有的item都会被创建,

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xie376450483/archive/2010/11/14/6008213.aspx

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值