旅游网站开发需求,告白墙 wordpress,外部链接对网站的影响,徐州网站运营文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译简介#xff1a;一般操作#xff1a;关于scenes bounding rect#xff1a;the location of items.scenes selection事件处理与事件转播 QGraphicsScene 的简单理解–关于手册的简要翻译
简介#xff1a;
QGraphic… 文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译简介一般操作关于scenes bounding rectthe location of items.scenes selection事件处理与事件转播 QGraphicsScene 的简单理解–关于手册的简要翻译
简介
QGraphicsScene 类提供了一个管理2D 图形一个操作平台。打个比方QGraphicsScene 类类似一个舞台各类的2D图形就是舞台中呈现的各个角色或者道具。
QGraphicsScene 类 常与QGraphicsView一起使用因为QGraphicsView会提供视图。打个比方就是观看舞台的取景框。常见的图形项这里包括线条、矩形框、文本甚至是自定义图形项等等。QGraphicsScene 类是raphics View Framework的一部分。
QGraphicsScene 类提供了一些操作方法如决定图形项是否可视及坐标位置。 运用QGraphicsView 类还可以缩放视图的方法来观看整个场景或者部分场景。
一个简单的例子 QGraphicsScene scene;scene.addText(Hello, world!);QGraphicsView view(scene);view.show();QGraphicsScene是不能观看自身的。必须创建QGraphicsView 对象才可以看到场景中的图形项的。
一般操作
一旦创建了场景如果想添加图像项怎么办有两个选择 1、通用方法addItem() 2、其他便捷方法 addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(), or addText()等。 图像项的大小可由上述函数来设定该值是相对于图形项自身的坐标体系的。添加到场景的默认坐标是00
然后就可以使用QGraphicsView来观看场景中的内容了。当场景发生变化时如图像项移动或者坐标发生改变时 QGraphicsScene会发送信号changed() 。删除图形项可用removeItem().
QGraphicsScene 运用索引算法使得管理图形项的坐标变得高效。默认的BSP树是使用的该算法是适合场景中多数图像项是静置的。
关于scene’s bounding rect
1、通过setSceneRect() 设定 2、场景的大小默认是无限制的图形项可以放置在场景中的任意一个位置。The scene rect 仅仅是用来记录、管理场景中的图形项的索引号的。 3、如果场景的rect 没有被设定那么该rect的大小是包括所有图像项的最小rect , 可以通过itemsBoundingRect()来查看。但是这是比较耗时的所以当需要操作较大的场景的时候往往会预先设定场景的Rect。
the location of items.
QGraphicsScene 的其中一项强有力的能力在于它可以非常有效的决定涂香香的位置信息。甚至在拥有上百万个图像项的场景中函数items() 能够决定图形项的位置在短短几个毫秒内。 items()函数的重载项由好多个 1、查找图像项的位置。 2、查找图像项与多边形的相交等等 items()返回的是列表最上层的是位于列表的第一项。为了便捷itemAt()函数返回指定点最上面的图形项。
scene’s selection
QGraphicsScene 还支持图形项的选择功能。 1、设置选择setSelectionArea(), 2、清除当前选择clearSelection(). 3、返回当前的选择 selectedItems()
事件处理与事件转播
QGraphicsScene 的另一个功能是转播来自QGraphicsView的事件。图形视图框架中的事件都是首先由视图进行接收然后传递给场景再由场景传递给相应的图形项。
举个例子 QApplication::sendEvent(). event()负责分发事件给各个图像项。对于一些常用的事件有一些便捷操作方法如keyPressEvent()处理键盘事件。mousePressEvent().处理鼠标点击事件。
而对于键盘事件它会传递给获得焦点的图形项如果场景没有获得焦点那么所有的键盘事件都会被丢弃。如果场景的setFocus()函数或者场景中的一个图形项获得了焦点那么场景也会自动获得焦点。如果场景丢失了焦点例如调用了clearFocus()函数然而它的一个图形项获得有焦点那么场景就会保存这个图形项的焦点信息当场景重新获得焦点后就会确保最后一个焦点项目重新获得焦点。
对于鼠标悬停QGraphicsScene 会调度悬停事件。如果一个图形项可以接收悬停事件那么当鼠标进入它的区域时它会收到一个 GraphicsSceneHoverEnter事件。如果鼠标继续在图形项区域中进行移动那么QGraphicsScene 会向该图形发送一个GraphicsSceneHoverMove事件。当鼠标离开图形项区域时它将会收到GraphicsSceneHoverLeave 事件。
所有的鼠标事件都会传递到当前鼠标抓取的图形项。
总结
场景的作用无非就是几下几点 1、提供了用于管理大量图形项的接口。如添加图形项删除图形项查找图形项等。通俗点讲场景可以看做是一个舞台或者容器。 2、传播事件给每一个图形项。 3、管理图形项的状态例如选择和焦点处理。