前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt自定义Widget之仪表盘

Qt自定义Widget之仪表盘

作者头像
用户5908113
发布2020-04-07 10:22:50
1.1K0
发布2020-04-07 10:22:50
举报
文章被收录于专栏:Pou光明Pou光明

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

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

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

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

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

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

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

一、仪表盘自身工作流程

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

绘制控件程序如下:

代码语言:javascript
复制
//绘制控件
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制作的仪表盘效果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档