Qt2D绘图-基本绘图

前言

参考: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));//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);//重新设定当前窗口坐标的格式,让其左上(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);
}

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器