2D绘图篇---Qt、QPainter、QPaintDevice、QPaintEngine

参考链接:

        第11篇 2D绘图(一)绘制简单图形 · Qt 快速入门系列教程

        第12篇 2D绘图(二)渐变填充 · Qt 快速入门系列教程

        第13篇 2D绘图(三)绘制文字 · Qt 快速入门系列教程

第11篇 绘制简单图形

图形绘制主要基于三大类QPainterQPaintDeviceQPaintEngine

        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()获取字体信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值