当前位置:天才代写 > tutorial > C语言/C++ 教程 > Qt进修之路(30):Graphics View Framework

Qt进修之路(30):Graphics View Framework

2017-11-05 08:00 星期日 所属: C语言/C++ 教程 浏览:422

副标题#e#

此刻根基上也已经到了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();
}


#p#副标题#e#

为了突出重点,我们就直接include了QtGui,不外在实际应用中不发起这么做。这里提供了直线的两种实现:一个是DrawApp利用我们前面先容的技能,重写paintEvent()函数,这里就不在赘述,重点来看main()函数内里的实现。

首先,我们建设了一个QGraphicsScene作为场景,然后在scene中添加了一个直线,这样就把我们需要的图形元件放到了scene 中。然后建设一个QGraphicsView工具举办调查。就这样,我们就是用Graphics View搭建了一个最简朴的应用。运行这个措施来当作果:

Qt学习之路(30):Graphics View Framework
Qt学习之路(30):Graphics View Framework

第一张图是Graphics View的,第二个是DrawApp的。固然这两个直线是同样的坐标,可是,DrawApp凭据原始坐标绘制出了直线,而Graphics View则凭据坐标绘制出直线之后,自动将直线居中显示在view视口。你可以通过拖动Graphics View来看直线是一直居中显示的。

这里仅仅是一个很简朴的比拟,不外你已经可以看到Graphics View成果的强大。仅这一个居中的操纵,假如你是用QPainter,就需要很大的计较劲了!虽然,假如你不需要这种居中,Graphics View也是可以像QPainter绘制的一样举办显示的。

出处:http://devbean.blog.51cto.com/448512/241186

 

    关键字:

天才代写-代写联系方式