Qt自定义Widget之仪表盘

栏目: IT技术 · 发布时间: 4年前

内容简介:上次和大家分享了使用Qml制作的仪表盘的过程,这次和大家分享下

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看 或点个赞,感谢~

上次和大家分享了使用Qml制作的仪表盘的过程,这次和大家分享下 Qt 的自定义控件过程。

Qt自定义Widget之仪表盘

效果图如上,有图有真相啊。

程序源码来自B站上,几乎没做任何修改,这里主要说下自定义控件的流程。

程序源码: https://github.com/xieguiproject/GCT.git

B 站视频地址: https://www.bilibili.com/video/BV194411u7f1

以前一篇关于一些2D绘图的文章:Qt 2D 绘图入门

首先Qt已经为我们提供了众多丰富且易用的基础控件,但是很多情况下我们需要实现自己的设计形态,如上面的仪表盘。这时候就需要自定义控件了,而且实际使用中还会用到样式表的。本次主要简述下自定义仪表盘的流程。

一、仪表盘自身工作流程

仪表盘控件继承自QWidget,使用定时器以100ms的频率触发painEvent绘图事件。

绘制控件程序如下:

//绘制控件

void Dashboard1::drawDashBoardWiget(QPainter *painter)

{

//全局参数初始化

qParmInit();

//设置透明

setOtherBackgroud(true,painter);

//绘制表盘

drawDashBoard(painter);

//绘制刻度尺

drawDivideRule(painter);

//绘制指针

drawDishBoardPointer(painter);

//绘制表盘文字

drawDashBoardText(painter);

}

刻度的位置通过setValue()方法来调整。

1. drawDashBoard()

只保留绘制表盘部分代码,如图,标出了4个数字,即是绘制了4个圆,程序中则是调用了4次drawEllipse(绘制椭圆)进行绘制。

Qt自定义Widget之仪表盘

2. drawDivideRule()

添加绘制刻线部分程序,效果如下。

程序中计算的方法就不做介绍了, fMaxDivide 表示大刻度线的个数, fMinDivide 表示小刻度线的个数。

Qt自定义Widget之仪表盘

3. drawDivideRule()

绘制刻度盘指针

通过绘制一个多边形与一个椭圆组合而成。

Qt自定义Widget之仪表盘

4. drawDashBoardText()

绘制表盘上的文本,效果如下

Qt自定义Widget之仪表盘

二、关于程序对自定义控件的调用

从github上下载下来的程序是通过提升控件的方式调用的。具体就是先拖一个Widget,然后右键提升,Qt会自动识别程序中已包含的自定义控件的。在主UI中可直接访问被提升过的控件的方法。

第二种方法就是通过布局来addWidget。效果如下

Qt自定义Widget之仪表盘

三、 小结

虽然不清楚刻度线与刻度指针的具体计算方式,但是我们可以快速的构建起一个项目,这应该是目前首要的任务。

效果视频如下:

第二个是之前qml制作的仪表盘效果。

修改过的完整工程可在公众号后台留言获取。

Qt自定义Widget之仪表盘


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

趋势红利

趋势红利

刘润 / 文化发展出版社(原印刷工业出版社) / 2016-6-1 / 45.00

【编辑推荐】 1、国内顶尖的互联网转型专家,海尔、百度等知名企业战略顾问刘润送给传统企业的转型、创新“导航仪”,这个时代企业家的必修课 站在近200年商业全景图角度,刘润发现三种企业类型(产品型、渠道型、营销型),针对不同企业类型定制转型战略(找到自己的未来红利),方便 传统企业对号入座:不走错路就是节省时间,适合自己的最有效率。 本书内容还源自芬尼克兹、红领集团、名创优品、必要......一起来看看 《趋势红利》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具