标题:Qt编写自定义控件4-旋转仪表盘
作者:liudianwu
日期:2019-04-22 09:22
内容:
前言
旋转仪表盘,一般用在需要触摸调节设置值的场景中,其实Qt本身就提供了QDial控件具有类似的功能,本控件最大的难点不在于绘制刻度和指针等,而在于自动计算当前用户按下处的坐标转换为当前值,这个功能想了很久,也看了QDial的源码,他里边写的非常复杂,最后还是参考的我打99分(100分留给自己未来写的书,哈哈!)的Qt书籍《c++ gui qt 4编程》中的篇章才写出来的,关键需要用到atan2将坐标转为值,看来学好数学真的很重要。
实现的功能
* 1:支持指示器样式选择 圆形指示器/指针指示器/圆角指针指示器/三角形指示器
* 2:支持鼠标按下旋转改变值
* 3:支持负数刻度值
* 4:支持设置当前值及范围值
* 5:支持左右旋转角度设置
* 6:支持设置大刻度数量和小刻度数量
* 7:支持设置各种颜色
* 8:字号随窗体拉伸自动变化
* 9:可设置是否显示当前值
效果图
头文件代码
#ifndef GAUGEDIAL_H
#define GAUGEDIAL_H
/**
* 旋转仪表盘控件 作者:feiyangqingyun(QQ:517216493) 2016-11-11
* 1:支持指示器样式选择 圆形指示器/指针指示器/圆角指针指示器/三角形指示器
* 2:支持鼠标按下旋转改变值
* 3:支持负数刻度值
* 4:支持设置当前值及范围值
* 5:支持左右旋转角度设置
* 6:支持设置大刻度数量和小刻度数量
* 7:支持设置各种颜色
* 8:字号随窗体拉伸自动变化
* 9:可设置是否显示当前值
*/
#include
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include
#else
#include
#endif
class QDESIGNER_WIDGET_EXPORT GaugeDial : public QWidget
#else
class GaugeDial : public QWidget
#endif
{
Q_OBJECT
Q_ENUMS(PointerStyle)
Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
Q_PROPERTY(double value READ getValue WRITE setValue)
Q_PROPERTY(int precision READ getPrecision WRITE setPrecision)
Q_PROPERTY(int scaleMajor READ getScaleMajor ..
#1 [九重水 04-22 10:35]
代码和注释等,发上来的时候没对齐,差评!
#2 回 九重水 的帖子 [liudianwu 04-22 10:41]
九重水:代码和注释等,发上来的时候没对齐,差评! (2019-04-22 10:35)
#3 [zhengtianzuo 04-22 11:47]
刘总效率真高啊 ~~~ 坐等后续
#4 [九重水 04-22 14:03]
讲真,卖自定义控件这个生意,我是看不上。从技术角度看来说,也不是说看不上,而是一个人单打独斗,很难做大赚得够多。
我觉得程序员(当我打出这三个字的时候,你应该知道我很认真说这句话),应该转变一种思维方式,跳出程序员的狭隘的视角。
从大市场的需求,或者用善于发现大用户隐藏性需求为出发点,缔造一个真正的用户量极大的软件帝国;或者,自己开发一套非常有利于自己壮大的自用工具。(这工具不必庞大或复杂,但却能很方便帮到自己)
当然小众市场也有小众市场的好处,练练手就好了,不必沉醉其中。
#5 [九重水 04-22 14:05]
为什么绝大多数程序员给人家打工?只有极少数程序员能够走上人生巅峰?这是一个值得思考的问题。