当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>Qt学习之路(24):QPainter</b>[VC/C++编程]

赞助商链接



  本文“<b>Qt学习之路(24):QPainter</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

多些大家对我的支持啊!有朋友也提出,前面的几节有关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供应了一个独立的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);
}


  以上是“<b>Qt学习之路(24):QPainter</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .