满堂花醉三千客,一剑霜寒十四州。这篇文章主要讲述Qt开发技术:Qt绘图系统QPainter详解相关的知识,希望能为你提供帮助。
前话
红胖子,来也!
Qt的图形绘制系统,本篇主要介绍绘图类QPainter。
绘图:QPainter类概述QPainter类在窗口和其他绘制设备上执行低级绘制。
QPainter提供高度优化的功能来完成大多数图形用户界面程序所需的工作。它能画出从简单线条到复杂形状如饼图和弦等一切图形。它还可以绘制对齐的文本和像素图。通常,它绘制一个“自然”坐标系,但它也可以进行视图和世界变换。QPainter可以对继承QPaintDevice类的任何对象进行操作。
QPainter的常见用法是在窗口的绘制事件中:构造和自定义(例如设置笔或画笔)绘制器。然后画。记住在绘制后销毁QPainer对象。例如:
QPainter的核心功能是绘图,但是类还提供了几个功能,允许您自定义QPainter的设置及其渲染质量,以及其他启用剪辑的功能。此外,还可以通过指定绘制者的合成模式来控制不同形状合并在一起的方式。
【Qt开发技术(Qt绘图系统QPainter详解)】函数QPainter::isActive()的作用是:指示绘制程序是否处于活动状态。painter由begin()函数和接受QPaintDevice参数的构造函数激活,end()函数和析构函数将停用它。
与QPaintDevice和QPaintEngine类一起,QPainter构成了qt绘图系统的基础。QPainter是用于执行绘图操作的类。QPaintDevice表示可以使用QPainter绘制的设备。QPaintEngine提供了一个接口,绘图使用它来绘制不同类型的设备。如果绘图处于活动状态,则device()返回及绘图在其上进行绘图的绘图设备,paintEngine()返回绘图当前正在使用的绘图引擎。有关详细信息,请参见绘图系统。
有时,要求在不通用的设备上作画。QPainer支持一个静态函数来执行此操作,setRedirected()。
警告:当paintdevice是一个窗口时,QPainter只能在paintEvent()函数或paintEvent()调用的函数中使用。
设置属性
可以根据自己的喜好自定义多个设置以使QPainer绘制:
请注意,这些设置中的一些反映了某些绘制设备中的设置,例如QWidget::Font()。QPainter::begin()函数(或等效的QPainter构造函数)从绘制设备复制这些属性。
可以随时通过调用save()函数来保存QPainer的状态,该函数将所有可用的设置保存在一个内部堆栈上(入栈)。restore()函数的作用是:将它们恢复(出栈)。
绘制
QPainter提供了绘制大多数基本体的函数:drawPoint()、drawPoints()、drawLine()、drawRect()、drawRoundedRect()、drawEllipse()、drawArc()、drawPie()、drawChord()、drawPolyline()、drawPolygon()、drawConverExpolygon()和drawCubicBezier()。drawRects()和drawLines()这两个函数使用当前的画笔在给定的QRects或QLines数组中绘制给定数量的矩形或线条。
QPainer类还提供了fillRect()函数,该函数用给定的QBrush填充给定的QRect,以及擦除给定矩形内区域的eraseRect()函数。
所有这些函数都有整数和浮点版本(推荐使用浮点数版本)。
绘制基础
测试对象为QWidget,重载paintEvent函数绘制,如下图:
文字:drawText
void Widget::drawText(QPainter *painter)
painter->
save();
painter->
drawText(rect(), Qt::AlignCenter, "Hello Qt!!!");
painter->
restore();
点:drawPoint,drawPoints
void Widget::drawPoint(QPainter *painter)
painter->
save();
painter->
drawPoint(10, 10);
QPoint point(20, 20);
painter->
drawPoint(point);
QPointF pointF(30, 30);
painter->
drawPoint(pointF);
painter->
restore();
void Widget::drawPoints(QPainter *painter)
painter->
save();
QPoint point[5];
point[0].setX(10);
point[0].setY(10);
point[1].setX(20);
point[1].setY(20);
point[2].setX(30);
point[2].setY(30);
point[3].setX(40);
point[3].setY(40);
point[4].setX(50);
point[4].setY(50);
painter->
drawPoints(point, 5);
QPolygon polypon;
polypon <
<
QPoint(10, 70);
polypon <
<
QPoint(20, 70);
polypon <
<
QPoint(30, 70);
polypon <
<
QPoint(40, 70);
polypon <
<
QPoint(50, 70);
polypon <
<
QPoint(60, 70);
painter->
drawPoints(polypon);
painter->
restore();
直线:drawLine,drawLines
void Widget::drawLine(QPainter *painter)
painter->
save();
QLine line(0, 0, 100, 100);
painter->
drawLine(line);
painter->
drawLine(0,100, 100, 0);
painter->
drawLine(QPoint(50, 0), QPoint(50, 100));
painter->
restore();
void Widget::drawLines(QPainter *painter)
QVector<
QLine>
vectorLine;
vectorLine <
<
QLine(10, 0, 10, 100);
vectorLine <
<
QLine(30, 0, 30, 100);
vectorLine <
<
QLine(50, 0, 50, 100);
vectorLine <
<
QLine(70, 0, 70, 100);
vectorLine <
<
QLine(90, 0, 90, 100);
painter->
drawLines(vectorLine);
折线:drawPolyline
void Widget::drawPolyline(QPainter *painter)
painter->
save();
QPoint point[5];
point[0].setX(10);
point[0].setY(10);
point[1].setX(20);
point[1].setY(10);
point[2].setX(40);
point[2].setY(40);
point[3].setX(40);
point[3].setY(60);
point[4].setX(50);
point[4].setY(50);
painter->
drawPolyline(point, 5);
QPolygon polypon;
polypon <
<
QPoint(10, 70);
polypon <
<
QPoint(20, 70);
推荐阅读
- G004-OS-LIN-OEL-01 Oracle Enterprise Linux 8.2 安装
- web前端期末大作业 html+css+javascript 校园主题网页设计(南京大学3页)个人毕设专用
- Qt开发技术(Qt的动态静态插件框架介绍和Demo)
- innobackup全备
- Qt实用技巧(使用QMediaPlayer播放mp4文件)
- Python反爬,JS反爬串讲,从MAOX眼X开始,本文优先解决反爬参数 signKey
- Qt实用技巧(将QWidget作为输入窗口,接收键盘消息输入法并且控制输入法悬浮工具栏位置控制)
- 打开雨林木风XP系统无线网络服务的办法 - 雨林木风Win10系统下载官网
- 中关村XP系统无法安装.Net Framework 4.5的处理办法 - 雨林木风Win10系统下载官网