Qt之渐变及其应用(绘制温度计、仪表盘和指示灯)

本文详细介绍了Qt中如何利用QLinearGradient、QRadialGradient和QConicalGradient创建渐变效果,以实现温度计、仪表盘和指示灯的边框及高亮效果。通过实例演示了不同类型的渐变在图形绘制中的应用,并提供了源码实现的获取方式。
摘要由CSDN通过智能技术生成

一.效果

图中仪表盘和指示灯的边框及高亮效果使用了渐变

二.原理

Qt自带一个暴强的关于渐变的demo——gradients

该demo详细介绍的如何在QPainter中使用渐变,一共有三种类型的渐变:QLinearGradient、QRadialGradient和QConicalGradient
1.QLinearGradient是线性渐变,也就是颜色的各个分量(red, green, blue)在两点之间的变化是线性的,需要设置渐变的起始和结束坐标、颜色,超出渐变范围的填充方式,它并不能单独的使用,而是要和 QBrush 一起使用实现填充效果,主要有以下一些函数:

// 创建 QLinearGradient,同时设置起始和结束坐标
QLinearGradient(const QPointF &start, const QPointF &finalStop)
QLinearGradient(qreal x1, qreal y1, qreal x2, qreal y2)

// 设置渐变的颜色,position 的取值范围是 [0.0, 1.0]
setColorAt(qreal position, const QColor &color)

// 超出渐变范围后的填充方式,默认使用 PadSpread:
//     QGrad
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
要在Qt的MainWindow上绘制温度仪表盘,可以使用Qt的绘图类QPainter和QPaintEvent事件。以下是实现的基本步骤: 1. 在MainWindow的头文件中声明一个函数,用于绘制温度仪表盘。 ```cpp protected: void paintEvent(QPaintEvent *event); ``` 2. 在cpp文件中实现这个函数,使用QPainter绘制温度仪表盘。 ```cpp void MainWindow::paintEvent(QPaintEvent *event) { // 创建QPainter对象 QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿 // 定义变量 int side = qMin(width(), height()); // 获取窗口的最小边长 int x = (width() - side) / 2; int y = (height() - side) / 2; int radius = side / 2; // 绘制圆盘 painter.translate(x, y); // 将坐标系移动到中心点 painter.setPen(Qt::NoPen); painter.setBrush(Qt::white); painter.drawEllipse(QPointF(0, 0), radius, radius); // 绘制刻度 painter.setPen(QPen(Qt::black, 2)); // 设置画笔 painter.save(); // 保存坐标系状态 for(int i = 0; i <= 360; i += 10) { painter.rotate(10); // 旋转坐标系 if(i % 30 == 0) { painter.drawLine(0, radius - 20, 0, radius - 40); // 绘制长刻度线 painter.drawText(-10, radius - 60, QString::number(i / 30)); // 绘制刻度值 } else { painter.drawLine(0, radius - 20, 0, radius - 30); // 绘制短刻度线 } } painter.restore(); // 恢复坐标系状态 // 绘制指针 painter.save(); // 保存坐标系状态 painter.rotate(225); // 旋转坐标系 painter.setPen(QPen(Qt::red, 5)); // 设置画笔 painter.drawLine(0, 0, radius - 40, 0); // 绘制指针 painter.restore(); // 恢复坐标系状态 } ``` 3. 在MainWindow的构造函数中启用Qt的自动填充背景色功能。 ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setAttribute(Qt::WA_StyledBackground, true); } ``` 现在,当MainWindow被绘制时,温度仪表盘将自动绘制在窗口中央。可以通过更改指针的旋转角度来模拟不同的温度值。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值