`
izuoyan
  • 浏览: 9222914 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt学习之路(24): QPainter

阅读更多
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/235332
多些大家对我的支持啊!有朋友也提出,前面的几节有关event的教程缺少例子。因为event比较难做例子,也就没有去写,只是把大概写了一下。今天带来的是新的部分,有关Qt的2D绘图。这部分不像前面的内容,还是比较好理解的啦!所以,例子也会增加出来。
有人问豆子拿Qt做什么,其实,豆子就是在做一个Qt的画图程序,努力朝着Photoshop和GIMP的方向发展。但这终究要经过很长的时间、很困难的路程的,所以也放在网上开源,有兴趣的朋友可以来试试的呀…
好了,闲话少说,来继续我们的学习吧!
Qt的绘图系统允许使用相同的API在屏幕和打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。
QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间可以由QPainter在上面进行绘 制;QPaintEngine提供了画笔painter在不同的设备上进行绘制的统一的接口。QPaintEngine类用在QPainter和 QPaintDevice之间,并且通常对开发人员是透明的,除非你需要自定义一个设备,这时候你就必须重新定义QPaintEngine了。
下图给出了这三个类之间的层次结构(出自Qt API 文档):
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);
}
为了把我们的程序运行起来,下面是main()函数:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
PaintedWidget w;
w.show();
return app.exec();
}
运行结果如下所示:
首先,我们声明了一个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.
好了,今天先到这里,我们将在下面一章中继续对这个paintEvent()函数进行说明。

本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/235332

分享到:
评论

相关推荐

    QT_QPainter实例

    通过学习QT_QPainter实例,开发者不仅能掌握QPainter的基本用法,还能了解到Qt绘图系统的高级特性,这对于开发GUI应用、游戏、数据可视化或者进行自定义控件设计都非常有帮助。QPainter的强大功能使得Qt成为了一个...

    13 QT图像绘制QPainter.zip

    在学习QPainter时,有几个关键概念是必须理解的: 1. **绘图上下文(QPaintDevice)**:如前面提到,这是QPainter进行绘图的基础,例如QWidget是窗口绘图的上下文,QPixmap和QImage则用于内存中的图像绘制。 2. **...

    Qt学习之路2带目标可注释版pdf

    **Qt学习之路2带目标可注释版pdf** Qt是一个跨平台的应用程序开发框架,主要应用于桌面和移动设备,由The Qt Company维护,并且广泛支持C++和QML语言。这个资源,"Qt学习之路2带目标可注释版pdf",显然是一本专注于...

    Qt例程源代码QPainter.7z

    Qt是一个强大的跨平台应用程序开发框架,广泛用于桌面、移动和嵌入式系统。它提供了丰富的图形用户界面(GUI)...对于初学者来说,这是一个很好的学习资源,而对于有经验的Qt开发者来说,也是巩固和提升技巧的好途径。

    Qt 学习之路:DZY

    ### Qt学习之路:核心知识点概览 #### 一、前言 - **Qt简介**:Qt是一个跨平台的C++图形用户界面应用程序开发框架。它不仅支持Windows、macOS、Linux等主流操作系统,还能用于开发嵌入式系统、移动设备应用(如...

    《Qt学习之路2》源码

    **Qt学习之路2** 是一个针对Qt初学者的教程系列,这个资源包含了作者在学习过程中编写的源码,旨在帮助读者逐步理解并掌握Qt编程。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动设备以及嵌入式系统中。...

    QT学习入门及开发实例

    "QT学习入门"这部分内容通常会涵盖以下知识点: 1. **QT安装与环境配置**:介绍如何在不同的操作系统上安装QT开发工具,如QT Creator和编译器,以及如何设置开发环境。 2. **QT基本概念**:包括QT的主要组件,如...

    Qt学习之路---尤其适用Qt初学者

    ### Qt学习之路——尤其适用Qt初学者 #### 前言 Qt是一个强大的跨平台应用程序开发框架,广泛应用于桌面和嵌入式系统。对于初学者而言,掌握Qt的基础及其核心特性至关重要。本书《Qt学习之路》是专为Qt初学者准备的...

    Qt学习之路.pdf

    ### Qt学习之路知识点总结 #### 一、基础知识与入门 - **Hello, World!** - **知识点**:Qt环境搭建、第一个Qt程序编写、基本的窗口显示。 - **重要性**:作为Qt初学者的第一课,通过简单的示例程序帮助理解Qt的...

    Qt学习之路2

    在深入探讨文档内容前,需明确“Qt学习之路2”这篇文档的主要目的是指导初学者如何学习和掌握Qt框架,这是一个广泛应用于软件开发中的跨平台C++图形用户界面应用程序框架。文档由Andy_Liu整理,包含了大量的章节,从...

    QT倒车线实现(利用QPainter绘制)

    QT倒车线实现是Qt框架下使用QPainter类进行图形绘制的一个典型应用。在QT开发中,QPainter是一个强大的绘图工具,它提供了丰富的绘图功能,如线条、曲线、矩形、椭圆、文本以及图像等的绘制,使得开发者能够自定义...

    Qt学习之路2--目录完整版

    《Qt学习之路》是针对Qt框架的一本详细教程,它以Qt4为基础,旨在帮助新手逐步掌握这个强大的跨平台应用程序开发工具。Qt是一个C++库,提供了丰富的API,用于构建图形用户界面(GUI)和非GUI应用程序。在本文中,...

    Qt5利用自绘QPainter实现水波纹进度条QProgressBarWater.rar

    在本文中,我们将深入探讨如何使用Qt5框架中的自绘技术,特别是利用QPainter类来实现一个具有水波纹效果的QProgressBar。首先,我们来看看这个项目的核心元素和原理。 Qt是一个跨平台的应用程序开发框架,它提供了...

    QT学习之路

    标题《QT学习之路》指明了文档的主要内容,即向读者介绍如何学习Qt这一跨平台的C++图形用户界面应用程序开发框架。Qt是一个功能强大的工具,能够用来开发具有图形用户界面的应用程序,并且支持多种操作系统平台,如...

    Qt+学习之路+2

    - **背景**: 本文档是基于作者之前的一个系列教程——《Qt学习之路》的更新版本,旨在适应Qt的新版本和发展趋势。 - **目的**: 更新和完善原有教程内容,使其更适合Qt 4.x和即将到来的Qt 5的学习需求。 - **定位**: ...

    其实这本PDF就是Qt学习之路第一版

    ### Qt学习之路知识点总结 #### 一、前言:Qt简介与选择 - **Qt**是一种跨平台的应用程序开发框架,广泛应用于桌面、移动设备及嵌入式系统的GUI应用程序开发。 - C++的GUI编程并非C++标准的一部分,因此开发者在...

    QT.rar_QT5 学习_linux系统QT学习_qt5开发_qt5教程_site:www.pudn.com

    "Qt开发入门教程08_Qt图形处理.pdf"可能会介绍Qt的图形绘制功能,包括QPainter、QGraphicsView等,以及如何实现自定义图形和动画效果。 "Qt开发入门教程09_Qt事件.pdf"涉及Qt的事件模型,包括事件的派发、处理和...

Global site tag (gtag.js) - Google Analytics