1. QPainter绘图事件 简介

Qt的绘图系统允许使用现同的API在屏幕和其他打印设备上进行绘制。整个绘图系统基于 QPainter、QPaintDevice、QPaintEngine 三个类。

QPainter 用来执行绘制的操作。

QPaintDevice 是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的空间。

QPaintEngine 提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。QPaintEngine 类应用于QPainter和QPaintDevice之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关系这个QPaintEngine这个类的。我们可以把QPainter理解为画笔,把QPaintDevice理解为使用画笔的地方,QPaintEngine理解为能让不同材质的纸张、屏幕都能使用同一种画笔。

三者的层次结构:

2. 绘图功能示例

GitHub源码仓库:Qt学习例程

创建 QWidget空工程。

Qt中绘图有专用的绘图事件函数。

重写:void Widget::paintEvent(QPaintEvent *),应用运行后就会自动调用该事件。

画线。

// 实例化画家对象,this指定绘图设备,当前窗口
QPainter painter(this);// 画一条线
painter.drawLine(QPoint(0,0), QPoint(100,100));

画圆。

// 实例化画家对象,this指定绘图设备
QPainter painter(this);// 画一条线
painter.drawLine(QPoint(0,0), QPoint(100,100));// 画圆
painter.drawEllipse(QPoint(100,100), 100, 100);
painter.drawEllipse(QPoint(100,100), 50, 30);

画矩形、画点。

// 画矩形 (左上角x坐标,左上角y坐标,宽度,高度)
painter.drawRect(QRect(200,20,100,100));
// 画矩形 (左上角x坐标,左上角y坐标)(宽度,高度)
painter.drawRect(QRect(QPoint(200,20),QSize(100,100)));// 这种方式会多出一个点,不方便使用
// 画矩形 (左上角x坐标,左上角y坐标)(右下角x坐标,右下角y坐标)
painter.drawRect(QRect(QPoint(200,120),QPoint(300,220)));// 画点
painter.drawPoint(300,223);

画文字。

// 画文字
painter.drawText(QRect(20,200,50,50), "好好学习,天天向上");

设置画笔颜色、线宽(如上例子,默认的颜色是黑色,线宽为1)。

// 设置画笔颜色
QPen pen(QColor(255,0,0));
// 设置画笔线宽(只对点线圆起作用,对文字不起作用)
pen.setWidth(3);
// 让画家使用这个画笔
painter.setPen(pen);

设置画笔线条风格(默认是SolidLine实线)。

// 设置画笔线条风格,默认是SolidLine实线
// DashLine虚线,DotLine点线,DashDotLine、DashDotDotLine点划线
pen.setStyle(Qt::DashDotLine);

画刷,对封闭图形填充颜色。

// 画刷,对封闭图形填充色
QBrush brush(Qt::blue);
// 让画家使用画刷
painter.setBrush(brush);

画刷设置风格。

// 画刷,对封闭图形填充色
QBrush brush(Qt::blue);
// 设置画刷风格,默认是SolidPattern实心填充
brush.setStyle(Qt::Dense5Pattern);
// 让画家使用画刷
painter.setBrush(brush);

GitHub源码仓库:Qt学习例程

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能相关推荐

  1. QT教程2:QT5的体系构架

    一.列出QT5体系内容 QT5的模块有• QtCore • QtGui • QtWidgets • QtMultimedia • QtBluetooth • QtNetwork • QtPositio ...

  2. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件

    GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...

  3. Qt绘图事件:QPainter、QPaintEngine和QPaintDevice

    一.绘图,刷新界面的方法 1.绘图事件 一般在绘图事件中绘图 1 void paintEvent(QPaintEvent *);//绘图事件在窗口重绘的时候(即状态改变)的时候调用 2 { 3 //1 ...

  4. 【QT】QT从零入门教程(十三):QT画笔工具QPainter (双缓冲绘图)

      QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage.QOpenGLPaintDevice.QWidget 和QPaintDevice 显示图形(线.形状.渐变等). ...

  5. [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

    [Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社 ...

  6. [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

    [Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘 ...

  7. [Qt教程] 第17篇 2D绘图(七)涂鸦板

    [Qt教程] 第17篇 2D绘图(七)涂鸦板 楼主  发表于 2013-5-2 21:37:41 | 查看: 1255| 回复: 16 涂鸦板 版权声明 该文章原创于Qter开源社区(www.qter ...

  8. [Qt教程] 第11篇 2D绘图(一)绘制简单图形

    [Qt教程] 第11篇 2D绘图(一)绘制简单图形 楼主  发表于 2013-4-23 12:52:35 | 查看: 1398| 回复: 5 绘制简单图形 版权声明 该文章原创于Qter开源社区,作者 ...

  9. QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现

    QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现 结构 UI部分 代码部分 step1:实现串口数据接受 串口接受数据格式 在`.pro`文件中添加`serialp ...

最新文章

  1. 远程手机测试机房的建立
  2. torch 和torchvision对应关系并附下载路径
  3. 7-2 旅行售货员 (10 分)(TSP问题思路加详解)
  4. mysql8导出文件_windows下 Mysql 8.0.x 数据库简单的导出和导入!!!
  5. 基本可编程芯片初始化字8255、8253、8259
  6. 解决no such file or directory的问题
  7. 微信小程序侧边栏滑动特效(左右滑动)
  8. 访问线上平台出现http状态码“502”和“504”
  9. 保险公司智能运营系统——软件需求规格说明
  10. 怎么把数组转化成字符串呢?有没有现成的函数呢?
  11. 举头望明月,低头敲代码
  12. 电视root工具_TapTap | 无需Root,成功移植 IOS14,拿下!!!
  13. dict 方法汇总
  14. 疫情发生后,易泊车牌识别加强小区管理,不让外来车进入
  15. 学会这几招,能找到90%以上的资源
  16. JAVA-DS-排序
  17. 关于个人电脑C盘清理的一些小整合
  18. 欧姆龙 PLC 程序NJ ST语言EtherCat总线控制 24个伺服轴大型程序电池生产线 包括PLC NJ-1400和威纶通触摸屏程序
  19. 【案例分享】高效率利器 - SC 频谱分析仪
  20. (二十七)投资组合的绩效评估

热门文章

  1. 算法进阶之Leetcode刷题记录
  2. 设置mysql密码 Access denied 问题
  3. c语言学习笔记 关于double
  4. sparkR介绍及安装
  5. 如何让Jython自动加载一个Jar包
  6. 【数据库系统设计】关系数据库标准语言SQL(1)
  7. 【网络安全工程师面试合集】—如何利用Http协议入侵网站
  8. 通向财务自由之路06_适应大环境的交易策略
  9. 银行有没有必要建立数据中台?看看这些架构师和技术总监怎么说
  10. 这份中台与数据报表的干货我写了10小时,真不想告诉你