参考链接:
第11篇 2D绘图(一)绘制简单图形 · Qt 快速入门系列教程
第12篇 2D绘图(二)渐变填充 · Qt 快速入门系列教程
第13篇 2D绘图(三)绘制文字 · Qt 快速入门系列教程
第11篇 绘制简单图形
图形绘制主要基于三大类QPainter、QPaintDevice、QPaintEngine。
QPainter:执行绘图操作,可以继承QPaintDevice类的任何对象进行绘制。
QPainterDevice:提供绘图设备,是一个二维空间抽象,可以使用QPainter在其上绘制。
QPaintEngine:提供接口,可以用于QPainter在不同的设备上进行绘制。
QPainter一般在重绘事件Paint Event的处理函数中重写paintEvent()函数进行绘制。
首先创建QPainter进行绘制,绘制完成后销毁QPainter对象。
一、绘制一条直线
1、重写paintEvent()函数
2、创建画笔QPainter
3、利用QPainter的drawLine()函数绘制
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawLine(QPointF(0, 0), QPointF(100, 100));
}
这里的起点为(0,0),终点为(100,100),单位是像素。
二、画笔和画刷
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen;//画笔
pen.setColor(Qt::red);//设置画笔颜色
QBrush brush(Qt::blue);//新建画刷并设置颜色
painter.setPen(pen);//添加画笔
painter.setBrush(brush);//添加画刷
painter.drawRect(50, 50, 200, 100);//绘制矩形
}
画笔---Qpen
画刷---QBrush
颜色是RGB值,如果有四个参数,最后一个参数是透明度(0完全透明,255完全不透明)
画笔和画刷要绑定到Painter上,并用drawRect(int x, int y, int wight, int hight)绘制矩形
其左上角顶点在(50, 50),宽为200,高为100。
还可以利用pen.setStyle()设置画笔样式
偷图
画刷样式
第12篇 渐变填充
QGradient类就是用来和QBrush一起制定渐变填充的
Qt支持三种类型的渐变填充
线性渐变(linear gradient)在开始点和结束点之间插入颜色
辐射渐变(radial gradient)在焦点和环绕它的圆环间插入颜色
锥形渐变(Conical)在圆心周围插入颜色
三种渐变由QGradient的三个子类来表示
QLinearGradient----线性
QRadialGradient----辐射
QConicalGradient---锥形
1、线性渐变QLinearGradient
//线性渐变
QLinearGradient linearGradient(QPointF(40, 190), QPointF(70, 190));
//插入颜色
linearGradient.setColorAt(0, Qt::yellow);
linearGradient.setColorAt(0.5, Qt::red);
linearGradient.setColorAt(1, Qt::green);
//指定渐变区域以外的区域的扩散方式
linearGradient.setSpread(QGradient::RepeatSpread);
//使用渐变作为画刷
QPainter painter(this);
painter.setBrush(linearGradient);
painter.drawRect(10, 20, 90, 40);
linear.setSpread(QGradient::RepeatSpread);
setSpread()函数来设置填充的扩散方式,即指明在指定区域以外的区域怎么填充。
它共有三个值:
PadSpread最接近的颜色进行填充------默认
RepeatSpread在渐变区域以外的区域重复渐变
ReflectSpread在渐变区域意外将反射渐变。
2、辐射渐变QRadialGradient
//辐射渐变
//圆心、半径、焦点
QRadialGradient radialGradient(QPointF(100, 190),50,QPointF(275,200));
//添加颜色
radialGradient.setColorAt(0, QColor(255, 255, 100, 150));
radialGradient.setColorAt(1, QColor(0, 0, 0, 50));
//设置画刷
painter.setBrush(radialGradient);
//画圆
//圆心、高、宽
painter.drawEllipse(QPointF(100, 190), 50, 50);
QRadialGradient::QRadialGradient( const QPointF & center, qreal radius, const QPointF & focalPoint )
QRadialGradient需要指定圆心center和半径radius从而确定一个圆
然后指定焦点focalPoint。焦点的位置为0,圆环的位置为1,然后在焦点和圆环间插入颜色。
辐射渐变也有setSpread()函数设置渐变区域以外的扩散方式:
3、锥形渐变QConicalGradient
//锥形渐变
QConicalGradient conicalGradient(QPointF(250, 190), 60);
conicalGradient.setColorAt(0.2, Qt::cyan);
conicalGradient.setColorAt(0.9, Qt::black);
painter.setBrush(conicalGradient);
painter.drawEllipse(QPointF(250, 190), 50, 50);
QConicalGradient::QConicalGradient ( const QPointF & center, qreal angle )
需要指定中心点center和一个角度angle。
然后延逆时针从给定的角度开始环绕中心点插入颜色。
第13篇 绘制文字
drawText()函数绘制文字
setFont()设置字体
fontInfo()获取字体信息