Qt自定义控件--仪表盘

一、前言

本篇博客是学习的大佬feiyangqingyun的博客,博客链接,有兴趣的可以去看一下。通过本次学习,让我对Qt的绘图技巧有了很大的提升,万分感谢大佬:飞扬青云

二、效果展示

在这里插入图片描述

三、绘图过程详解

我把仪表盘划分为五个部分,分别表盘框架刻度线刻度值数值指针,下面开始分步讲解。

2.1、表盘框架

在这里插入图片描述
表盘框架分为六部分:表盘框架外圆、表盘框架中间圆、表盘框架彩环、表盘框架内圆和中心红圆环和中心圆,具体怎么绘制在此不做过多赘述,不懂就去研究一下Qt的绘图原理。
值得注意的技巧:

坐标系平移painter->translate(width()/2,height()/2)
等比例缩放painter->scale(side / 200.0, side / 200.0)

2.2、刻度线

在这里插入图片描述
刻度绘制有个很骚的操作,旋转坐标系painter.rotate(Angle),Qt的坐标系是x轴正方向向右,y轴正方向向下,例如我要从左开始绘制刻度线,直接将坐标系旋转135°,然后每画一个刻度旋转一个刻度对应的角度间隔(270°/(100-0))。

2.3、刻度值

在这里插入图片描述
绘制刻度值不采用旋转坐标的方法,采用极坐标计算坐标。初始坐标系为水平向右为x轴正方向,垂直向下为y轴正方向,现在要从0开始绘制,极坐标是逆时针为正反向,所以0处的弧度为(360°-135°) * (180 / PI),刻度跨度总共是270°,所以每个大刻度值之间的角度间隔是270°/10,相应地也转化为弧度制。然后使用三角公式x=r * cosa,y=r * sina,cosa和sina是值对应的角度的弧度制。但是这样还不够,因为绘制文字是在一个矩形框里面绘制,如果我们按算出来的x和y进行绘制,那这个x和y对应矩形框的左上角坐标,所以绘制出来的效果会对不齐。为了解决这个问题,首先我们需要修改字体的像素值,然后计算出值(对应的矩形框)的宽度和高度,然后在实际绘制时,对计算出的x和y做一个偏移处理(例如,宽、高的一半),这样画出来的刻度效果会好很多。

2.3、数值

在这里插入图片描述
数值直接绘制在中心即可。

2.4、指针

在这里插入图片描述
指针是由一个细长的等边三角形组成的,绘制指针依然采用旋转坐标系的方法绘制。从0开始绘制,首先旋转45°,取三个点(-5,0)、(5,0)、(0,radius),也就是在x轴左右取一对对称点,在y轴上取一个点,然后根据当前值计算旋转坐标系的角度,指针就会随之移动。具体绘制时,可将三个点放在一个集合里,然后进行绘制即可。

四、锦上添花

在这里插入图片描述
这一步是给仪表盘加一个反光的效果,产生一种真实感。原理是用一个小圆去减掉大圆,然后用渐变画刷绘制。

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
迷你仪表盘是一种自定义控件,主要用于显示简单的数据指示或状态显示。在Qt/C++中编写自定义迷你仪表盘需要以下步骤: 1. 创建一个新的自定义控件类,可以继承QWidget或QLabel。在类的构造函数中初始化一些基本属性,例如仪表盘的大小、颜色、范围等。 2. 重写paintEvent函数,该函数用于绘制仪表盘的外观。在paintEvent函数中,可以使用QPainter绘制各种图形元素,例如圆形、刻度线、指针等。可以根据数据范围和当前值来动态改变指针的位置或角度。 3. 定义一些公有的函数或信号槽,用于设置或更新仪表盘的值。例如,可以定义一个setValue函数用于设置当前值,并在函数内部调用update函数来触发重绘事件。 4. 在主窗口或其他需要使用仪表盘的地方,实例化自定义的迷你仪表盘控件,并设置一些属性,例如位置、大小、初始值等。还可以通过设置样式表来对仪表盘进行外观的自定义。 5. 根据需要,可以添加一些交互功能。例如,可以响应鼠标点击事件,以实现互动操作,例如点击指针可以通过setValue函数来设置对应的值。 编写自定义控件需要一定的Qt/C++编程基础和绘图知识,掌握了基本的绘图函数和事件处理机制后,可以根据需求进行扩展和优化。同时,为了提高代码的可重用性和可维护性,可以将控件的逻辑和外观分离,采用MVC设计模式或其他架构模式进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝勒里恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值