<b>Qt学习之路(30):Graphics View Framework</b>[VC/C++编程]
本文“<b>Qt学习之路(30):Graphics View Framework</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
目前基本上也已经到了2D画图部份的尾声,所谓重头戏都是在最后压轴的,目前我们就要来看看在画图部份功效最强盛的Graphics View.我们常常说KDE桌面,新版本的KDE桌面就是成立在Graphics View的底子之上,可见其强盛之处.
Qt的白皮书里面这样写道:“Qt Graphics View 供应了用于管理和交互大量定制的 2D 图形对象的平面以及可视化显示对象的视图 widget,并支持缩放和旋转功效.Graphics View 利用 BSP(二进制空间划分)树形可非常快速地找到对象,因此即便是包含百万个对象的大型场景,也能及时图形化显示.”
Graphics View是一个基于item的M-V架构的框架.
基于item意思是,它的每一个组件都是一个item.这是与QPainter的状况机差别.回想一下,利用QPainter画图多是采取一种面向历程的描写方法,首先利用drawLine()画一条直线,然后利用drawPolygon()画一个多边形;而关于Graphics View来说,相同的历程可以是,首先成立一个场景scene,然后成立一个line对象和一个polygon对象,再利用scene的add()函数将 line和polygon增添到scene,最后通过视口view便可以看到了.乍看起来,后者仿佛越发复杂,但是,假如你的图象中包含了不计其数的直线、多边形之类,管理这些对象要比管理QPainter的draw语句简单得多.并且,这些图形对象也越发符合面向对象的计划要求:一个很复杂的图形可以很便利的复用.
M-V架构的意思是,Graphics View供应一个model和一个view.所谓model就是我们增添的各种对象,所谓view就是我们察看这些对象的视口.同一个model可以由很多view从差别的角度举行察看,这是很常见的需求.利用QPainter就很难实现这一点,这需求很复杂的计算,而Qt的Graphics View便可以很简单的实现.
Graphics View供应了一个QGraphicsScene作为场景,便是我们增添图形的空间,相当于整个世界;一个QGraphicsView作为视口,也就是我们察看的窗口,相当于照相机的取景框,这个取景框可以覆盖整个场景,也可以是场景的一部份;一些QGraphicsItem作为图形元件,以便scene 增添,Qt内置了很多图形,比方line、polygon等,都是担当自QGraphicsItem.
下面我们来看一下代码:
#include <QtGui>
class DrawApp : public QWidget {
public:
DrawApp();
protected:
void paintEvent(QPaintEvent *event);
};
DrawApp::DrawApp()
{
}
void DrawApp::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(10, 10, 150, 300);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene *scene = new QGraphicsScene;
scene->addLine(10, 10, 150, 300);
QGraphicsView *view = new QGraphicsView(scene);
view->resize(500, 500);
view->setWindowTitle("Graphics View");
view->show();
DrawApp *da = new DrawApp;
da->resize(500, 500);
da->setWindowTitle("QWidget");
da->show();
return a.exec();
}
以上是“<b>Qt学习之路(30):Graphics View Framework</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |