大家好,欢迎来到IT知识分享网。
一.场景(QGraphicsScene)
QGraphicsScene 提供了图形视图框架的场景,相当于一块画布,并具有以下功能。
1.一个管理大量图形项的快速接口。
2.向每个图形项传播事件
3.管理图形项的状态,比如选择,焦点处理等
4.提供无转换的渲染功能,主要用于打印
简单地一个场景使用
QGraphicsScene scene;//场景 scene.addText("Hello, world!");//添加文本图形项 QGraphicsView view(&scene);//设置视图 view.show();
addText(“Hello, world!”) 相当于执行了以下两句
QGraphicsTextItem *item = new QGraphicsTextItem(“Hello, world!”);
scene.addItem(item);
如果场景要删除一个图形项,可以使用removeItem(item)函数。
一般而言,场景层从下到上共分为3层,分别为背景层(backgroundLayer), 图形项层(Itemlayer)与前景层(ForegroundLayer)。场景绘制总是从背景层开始,然后是图形层,最后是前景层。
scene.setForegroundBrush(QColor(255,255,255,100));//前景层颜色为白色半透明
scene.setBackgroundBrush(Qt::green);//背景色设置为绿色
对于前景层,我们一般不进行设置,或者像上面这样设置为半透明的白色。对于背景层,这里设置为了绿色,当然,我们也可以将一张图片设置为背景。
scene.setBackgroundBrush(QPixmap(“:/background.jpg”));
2. 场景边界矩形
场景大小默认是没有限制的,图形项可以放到场景的任何位置。而场景的边界矩形仅用于场景内部进行索引的维护。
因为如果没有边界矩形,场景就要搜索所有的图形项,然后确定出其边界,这是十分费时的。所以如果要操作一个较大的场景,我们应该给出它的边界矩形。设置边界矩形,可以使用setSceneRect()函数。
3.图形项查找
场景最大的优势之一就是可以快速的锁定图形项的位置,即使有上百万个图形项,items()函数也能在数毫秒的时间内锁定一个图形项的位置。items()函数有几个重载函数来方便的进行图形项的查找。但是有时在场景的一个点可能重叠着几个图形项,这时我们可以使用itemAt()函数返回最上面的一个图形项。对于这些函数的使用,我们到后面讲视图时再举例讲解。
4.事件处理和传播
场景可以传播来自视图的事件,将事件传播给该点最顶层的图形项。但是就像我们在讲图形项时所说的那样,如果一个图形项要接收键盘事件,那么它必须获得焦点。而且,如果我们在场景中重写了事件处理函数,那么在该函数的最后,必须调用场景默认的事件处理函数,只有这样,图形项才能接收到该事件。这一点我们也到后面讲视图时再细讲。
二.视图(QGraphicsView)
QGraphicsView 提供了视图窗口部件,它使场景的内容可视化。你可以给一个场景关联多个视图,从而给一个数据集提供多个视口。视图部件是一个滚动区域,就是说,它可以提供一个滚动条来显示大型的场景。如果要使用OpenGL,你可以使用QGraphicsView::setViewport()函数来添加QGLWidget 。
(一)缩放与旋转
QGraphicsView::scale(xScale, yScale);//在分别在x,y方向上缩放xScale,yScale倍。若为1.0倍,则不进行缩放。
QGraphicsView::rotate(90);//顺时针旋转90度
- QGraphicsView::NoDrag :忽略鼠标事件,不可以拖动。
- QGraphicsView::ScrollHandDrag :光标变为手型,可以拖动场景进行移动。
- QGraphicsView::RubberBandDrag :使用橡皮筋效果,进行区域选择,可以选中一个区域内的所有图形项。
=================================================================================================================
参考文章:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f7207a8090027fa3ce08c6790f1c0721bcac2755525e91d27d135ef21f4beb867229604666eddb9fdb1ccabb966e74de3035061f8645069644ef9d49669460c318b3f448a6adf142d7f58596c85523dd52766d81809c5b7303cb1fa65462b6b198384a0246ed&p=b4769a479d9e11a058ee95685a539e&newp=882a9546d79f1cec17be9b7c4b0091231610db2151d4da176b82c825d7331b001c3bbfb423251300d9c67c670ba44c56ecf6357437012ba3dda5c91d9fb4c57479d47a773f&user=baidu&fm=sc&query=QGraphicsView%3A%3ADragMode&qid=dcee835500024aea&p1=8
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21010.html