Qt——自定义控件温度计

QPainter实现一个温度计,如下图所示:

gif如下所示:

1.代码实现原理

首先实现一个外圆框,效果如下所示:

外圆框代码如下所示:

cpp 复制代码
void TempUI::drawControlBackColor(QPainter& paint)
{
    paint.save();

    int dy1 = (height() - _realHeight)/2;
    paint.translate(width()/2, height() - dy1 -_bootomCircleRadius);
    paint.setBrush(Qt::white);
    paint.drawEllipse(QPointF(0, 0), _bootomCircleRadius, _bootomCircleRadius);

    paint.drawRect(-_topProgressBarWidth/2, -_bootomCircleRadius-_topProgressBarHeight
                   , _topProgressBarWidth, _topProgressBarHeight + _bootomCircleRadius*0.3);


    paint.restore();
}

实现好后就可以在该外圆框下叠加绘图,这样就可以实现一个多色的温度计控。

2.控件示例实现

提供了一个setRange(int value, int min, int max)函数,可以设置温度计的最小值和最大值,当前值:

cpp 复制代码
TempUI::setRange(int value, int min, int max, int scaleTextCnt = 11);

比如设置:

cpp 复制代码
setRange(50 , -50 , 50, 11);        // 当前值50, 范围-50~50,刻度文本数量11

效果如下所示:

相关推荐
sakiko_3 小时前
OC基础语法(与Swift对比)-1
开发语言·ios·objective-c·swift
迷迭香yy3 小时前
基金档案数据工程实战从收入分析到持仓穿透的Python解析 IG50免费开源股票数据API接口
开发语言·python
晊晌_h4 小时前
嵌入式从0到精通——线程
java·开发语言·jvm
一木 之林4 小时前
五、C++ 新特性、关键字与编译原理(进阶)(二)
java·开发语言·c++
OPEN-F4 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
小灰灰搞电子4 小时前
Rust+Slint 实现动态轮播图源码分享,支持动态删除、添加
开发语言·rust·slint·动态轮播图
前端 贾公子4 小时前
第09章:上下文与记忆 (6)
开发语言·前端·python
sunburn-5 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
jayson.h5 小时前
PDF 合并+添加页码 相关库、类、函数
开发语言·前端·python
qq_322762755 小时前
一个接口从能用到稳定,中间差的到底是什么
服务器·开发语言·lua·接口·fastapi·请求