前言
参考:Qt快速入门系列教程
此页是自己学习使随记,全面的请看教程
Qt有一个图形视图框架,有关图形项->场景->视图,碰撞检测,适合做游戏
Qt绘制系统
QPainter是一个状态机,设定一个状态后,接下来一直是这个状态
临时绘制就是不改变当前状态,使用
1 2 3
| painter.save() //code painter.restore()
|
必须成对出现。
基本绘制
如何画线、矩形、椭圆
1 2 3 4 5 6 7 8 9
| 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);
|
抗锯齿 反走样
1 2 3 4
| painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap)); painter.setBrush(Qt::yellow); painter.drawEllipse(300, 150, 200, 150);
|
渐变
Qt 提供了三种渐变:线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)和角度渐变(QConicalGradient)。
1 2 3 4 5 6 7 8 9 10
| painter.setRenderHint(QPainter::Antialiasing,true); QLinearGradient linearGradient(60,50,200,200); linearGradient.setColorAt(0.2,Qt::white); linearGradient.setColorAt(0.6,Qt::green); linearGradient.setColorAt(1.0,Qt::black); painter.setBrush(QBrush(linearGradient)); painter.drawEllipse(50,50,200,150);
|
三种渐变方式
坐标系统
坐标变换
- 平移 translate()
- 顺时针 rotate()
- 放大 scale()
- 纵向扭曲 shear()
改变坐标系
1 2 3
| QPainter painter(this); painter.setWindow(0, 0, 200, 200); painter.fillRect(0, 0, 200, 200, Qt::red);
|
setViewPort()
设置显示图形的范围
绘制路径
使用QPainterPath类,然后使用QPainter::drawPath()来进行绘制。QPainterPath类为绘制操作提供了一个容器
,可以用来创建图形并且重复使用。
一个绘图路径就是由多个矩形、椭圆、线条或者曲线等组成的对象,一个路径可以是封闭的,例如矩形和椭圆;也可以是非封闭的,例如线条和曲线。
简单应用
1 2 3 4 5 6 7 8 9 10
| void Widget::paintEvent(QPaintEvent *) { QPainterPath path; path.addEllipse(100, 100, 50, 50); path.lineTo(200, 200); QPainter painter(this); painter.setPen(Qt::blue); painter.setBrush(Qt::red); painter.drawPath(path); }
|
上一篇:OpenCV3.1+Qt5.9.1环境搭建
下一篇:Qt2D绘图-窗口与视口