内容简介:上次和大家分享了使用Qml制作的仪表盘的过程,这次和大家分享下
点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看 或点个赞,感谢~
上次和大家分享了使用Qml制作的仪表盘的过程,这次和大家分享下 Qt 的自定义控件过程。
效果图如上,有图有真相啊。
程序源码来自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(绘制椭圆)进行绘制。
2. drawDivideRule()
添加绘制刻线部分程序,效果如下。
程序中计算的方法就不做介绍了, fMaxDivide 表示大刻度线的个数, fMinDivide 表示小刻度线的个数。
3. drawDivideRule()
绘制刻度盘指针
通过绘制一个多边形与一个椭圆组合而成。
4. drawDashBoardText()
绘制表盘上的文本,效果如下
二、关于程序对自定义控件的调用
从github上下载下来的程序是通过提升控件的方式调用的。具体就是先拖一个Widget,然后右键提升,Qt会自动识别程序中已包含的自定义控件的。在主UI中可直接访问被提升过的控件的方法。
第二种方法就是通过布局来addWidget。效果如下
三、 小结
虽然不清楚刻度线与刻度指针的具体计算方式,但是我们可以快速的构建起一个项目,这应该是目前首要的任务。
效果视频如下:
第二个是之前qml制作的仪表盘效果。
修改过的完整工程可在公众号后台留言获取。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Python
Paul Barry / O'Reilly Media / 2010-11-30 / USD 49.99
Are you keen to add Python to your programming skills? Learn quickly and have some fun at the same time with Head First Python. This book takes you beyond typical how-to manuals with engaging images, ......一起来看看 《Head First Python》 这本书的介绍吧!