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

Qt进修之路(24):QPainter

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

副标题#e#

多些各人对我的支持啊!有伴侣也提出,前面的几节有关event的教程缺少例子。因为event较量难做例子,也就没有去写,只是把或许写了一下。本日带来的是新的部门,有关Qt的2D画图。这部门不像前面的内容,照旧较量好领略的啦!所以,例子也会增加出来。

有人问豆子拿Qt做什么,其实,豆子就是在做一个Qt的绘图措施,尽力朝着Photoshop和GIMP的偏向成长。但这终究要颠末很长的时间、很坚苦的旅程的,所以也放在网上开源,有乐趣的伴侣可以来试试的呀…

好了,闲话少说,来继承我们的进修吧!

Qt的画图系统答允利用沟通的API在屏幕和打印设备长举办绘制。整个画图系统基于QPainter,QPainterDevice和QPaintEngine三个类。

QPainter用来执行绘制的操纵;QPaintDevice是一个二维空间的抽象,这个二维空间可以由QPainter在上面举办绘制;QPaintEngine提供了画笔painter在差异的设备长举办绘制的统一的接口。QPaintEngine类用在QPainter和 QPaintDevice之间,而且凡是对开拓人员是透明的,除非你需要自界说一个设备,这时候你就必需从头界说QPaintEngine了。

下图给出了这三个类之间的条理布局(出自Qt API 文档):

Qt学习之路(24):QPainter

这种实现的主要长处是,所有的绘制都遵循着同一种绘制流程,这样,添加可以很利便的添加新的特性,也可觉得不支持的成果添加一个默认的实现方法。别的需要说明一点,Qt提供了一个独立的QtOpenGL模块,可以让你在Qt的应用措施中利用OpenGL成果。该模块提供了一个OpenGL的模块,可以像其他的Qt组件一样的利用。它的差异之处在于,它是利用OpenGL作为显示技能,利用OpenGL函数举办绘制。对付这个组件,我们今后会再先容。

通过前面的先容我们知道,Qt的画图系统实际上是说,利用QPainter在QPainterDevice上面举办绘制,它们之间利用QPaintEngine举办通讯。好了,下面我们来看看怎么利用QPainter。

首先我们界说一个组件,同前面的界说雷同:

class PaintedWidget : public QWidget
{
public:
PaintedWidget();
protected:
void paintEvent(QPaintEvent *event);
};

这里我们只界说了一个结构函数,而且重界说paintEvent()函数。从名字就可以看出,这实际上是一个事件的回调函数。请留意,一般而言,Qt的事件函数都是protected的,所以,假如你要重写事件,就需要担任这个类了。至于事件相关的对象,我们在前面的内容已经较量具体的论述了,这里不再赘述。

结构函数内里主要是一些巨细之类的界说,这里不再具体说明:

PaintedWidget::PaintedWidget()
{
resize(800, 600);
setWindowTitle(tr("Paint Demo"));
}

我们体贴的是paintEvent()函数的实现:

void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80, 100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10, 10, 100, 400);
painter.setPen(QPen(Qt::green, 5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50, 150, 400, 200);
}


#p#副标题#e#

为了把我们的措施运行起来,下面是main()函数:

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}

运行功效如下所示:

Qt学习之路(24):QPainter

查察原图(大图)

首先,我们声明白一个QPainter工具。留意,我们在这个函数的栈空间成立了工具,因此不需要delete。

QPainter吸收一个QPaintDevice*范例的参数。QPaintDevice有许多子类,好比QImage,以及 QWidget。留意回想一下,QPaintDevice可以领略成要在那边去画,而此刻我们但愿在这个widget上画,因此传入的是this指针。

QPainter有许多以draw开头的函数,用于各类图形的绘制,好比这里的drawLine,drawRect和和drawEllipse 等。详细的参数请参阅API文档。下图给出了QPainter的draw函数的实例,本图来自C++ GUI Programming with Qt4, 2nd Edition.

Qt学习之路(24):QPainter

好了,本日先到这里,我们将在下面一章中继承对这个paintEvent()函数举办说明。

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

 

    关键字:

天才代写-代写联系方式