版权声明 该文章原创于Qt开源社区(www.qter.org),作者yafeilinux,转载请注明出处!可以到这里讨论该文章! 导语 环境:Windows 7 + Qt 5.8.0(包含Qt Creator 4.2.1) 正文 三、场景(QGraphicsScene) QGraphicsScene提供了图形视图框架的场景,它有以下功能:
我们新建空的Qt项目(Empty qmake Project),项目名称为graphicsview03。然后在这个项目中添加新的C++ 源文件,命名为main.cpp,将main.cpp的内容更改如下。 #include <QtWidgets> int main(int argc,char* argv[ ]) { QApplication app(argc,argv); QGraphicsScene scene; scene.addText("Hello, world!"); QGraphicsView view(&scene); view.show(); return app.exec(); } 因为使用了Qt Widgets模块,所以需要在graphicsview03.pro文件中添加QT += widgets 一行代码。运行效果如下。 这里使用addText()函数添加了一个文本图形项。执行这条语句就相当于执行了下面两条语句: QGraphicsTextItem *item = new QGraphicsTextItem("Hello, world!"); scene.addItem(item); 如果要删除一个图形项我们可以调用removeItem()函数,如:scene.removeItem(item); (一)场景层 一个场景分为三个层:图形项层(ItemLayer)、前景层(ForegroundLayer)和背景层(BackgroundLayer)。场景的绘制总是从背景层开始,然后是图形项层,最后是前景层。看下面的例子: 我们在上面的程序中添加代码: scene.setForegroundBrush(QColor(255, 255, 255, 100)); scene.setBackgroundBrush(Qt::green); 运行程序,效果如下: 对于前景层,我们一般不进行设置,或者像上面这样设置为半透明的白色。对于背景层,这里设置为了绿色,当然,我们也可以将一张图片设置为背景。 scene.setBackgroundBrush(QPixmap("../graphicsview03/back.jpg")); 运行程序,我们可以看到,图片默认是平铺的。 如果想进一步控制前景和背景层,我们可以重新实现drawForeground()函数和drawBackground()函数。 (二)索引算法 索引算法,是指在场景中进行图形项查找的算法。QGraphicsScene中提供了两种选择,它们在一个枚举类型QGraphicsScene::ItemIndexMethod中,分别是:
我们可以使用setItemIndexMethod()函数进行索引算法的更改。 (三)边界矩形 图形项可以放到场景的任何位置,场景的大小默认是没有限制的。而场景的边界矩形仅用于场景内部进行索引的维护。因为如果没有边界矩形,场景就要搜索所有的图形项,然后确定出其边界,这是十分费时的。所以如果要操作一个较大的场景,我们应该给出它的边界矩形。设置边界矩形,可以使用setSceneRect()函数。 (四)图形项查找 |