找回密码
 立即注册
收起左侧

Qt编写自定义控件54-时钟仪表盘

0
回复
348
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2019-9-20 09:41:09 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一、前言
这个控件没有太多的应用场景,主要就是练手,论美观的话比不上之前发过的一个图片时钟控件,所以此控件也是作为一个基础的绘制demo出现在Qt源码中,我们可以在Qt的安装目录下找到一个时钟控件的绘制,甚至还有qml版本,本控件无非就是一个仪表边框加上时钟分钟刻度再加上时分秒指针,打完收工,我是在此基础上增加了可以设置各种颜色,然后鼠标右键可设置四种效果 普通效果/弹簧效果/连续效果/隐藏效果,弹簧效果的意思是秒钟走动的时候,先移动到超过指定位置,然后又重新弹回来,连续效果的意思是将步长减少,一点点的移动,将秒钟的定时器精度调高。还有一个新增的功能是内置了设置系统时间公共槽函数,支持任意操作系统。

二、实现的功能
* 1:可设置边框颜色
* 2:可设置前景色背景色
* 3:可设置时钟分钟秒钟指针颜色
* 4:可设置刷新间隔
* 5:鼠标右键可设置四种效果 普通效果/弹簧效果/连续效果/隐藏效果
* 6:增加设置系统时间公共槽函数,支持任意操作系统

三、效果图



四、头文件代码
  1. #ifndef GAUGECLOCK_H
  2. #define GAUGECLOCK_H

  3. /**
  4. * 时钟仪表盘控件 作者:feiyangqingyun(QQ:517216493) 2016-10-23
  5. * 1:可设置边框颜色
  6. * 2:可设置前景色背景色
  7. * 3:可设置时钟分钟秒钟指针颜色
  8. * 4:可设置刷新间隔
  9. * 5:鼠标右键可设置四种效果 普通效果/弹簧效果/连续效果/隐藏效果
  10. * 6:增加设置系统时间公共槽函数,支持任意操作系统
  11. */

  12. #include <QWidget>

  13. #ifdef quc
  14. #if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
  15. #include <QtDesigner/QDesignerExportWidget>
  16. #else
  17. #include <QtUiPlugin/QDesignerExportWidget>
  18. #endif

  19. class QDESIGNER_WIDGET_EXPORT GaugeClock : public QWidget
  20. #else
  21. class GaugeClock : public QWidget
  22. #endif

  23. {
  24.         Q_OBJECT
  25.         Q_ENUMS(SecondStyle)

  26.         Q_PROPERTY(QColor crownColorStart READ getCrownColorStart WRITE setCrownColorStart)
  27.         Q_PROPERTY(QColor crownColorEnd READ getCrownColorEnd WRITE setCrownColorEnd)

  28.         Q_PROPERTY(QColor foreground READ getForeground WRITE setForeground)
  29.         Q_PROPERTY(QColor background READ getBackground WRITE setBackground)

  30.         Q_PROPERTY(QColor pointerHourColor READ getPointerHourColor WRITE setPointerHourColor)
  31.         Q_PROPERTY(QColor pointerMinColor READ getPointerMinColor WRITE setPointerMinColor)
  32.         Q_PROPERTY(QColor pointerSecColor READ getPointerSecColor WRITE setPointerSecColor)

  33.     Q_PROPERTY(SecondStyle secondStyle READ getSecondStyle WRITE setSecondStyle)

  34. public:
  35.         enum SecondStyle {
  36.                 SecondStyle_Normal = 0,     //普通效果
  37.                 SecondStyle_Spring = 1,     //弹簧效果
  38.                 SecondStyle_Continue = 2,   //连续效果
  39.                 SecondStyle_Hide = 3        //隐藏效果
  40.         };

  41.         explicit GaugeClock(QWidget *parent = 0);
  42.         ~GaugeClock();

  43. protected:
  44.         void paintEvent(QPaintEvent *);
  45.         void drawCrown(QPainter *painter);
  46.         void drawBg(QPainter *painter);
  47.         void drawScale(QPainter *painter);
  48.         void drawScaleNum(QPainter *painter);
  49.         void drawHour(QPainter *painter);
  50.         void drawMin(QPainter *painter);
  51.         void drawSec(QPainter *painter);
  52.         void drawDot(QPainter *painter);

  53. private:
  54.     QColor crownColorStart;         //外边框渐变开始颜色
  55.         QColor crownColorEnd;           //外边框渐变结束颜色

  56.         QColor foreground;              //前景色
  57.         QColor background;              //背景色

  58.         QColor pointerHourColor;        //时钟指针颜色
  59.         QColor pointerMinColor;         //分钟指针颜色
  60.         QColor pointerSecColor;         //秒钟指针颜色

  61.     SecondStyle secondStyle;        //秒针走动样式

  62.         QTimer *timer;                  //定时器绘制
  63.         int hour, min, sec, msec;       //时分秒毫秒

  64.         QTimer *timerSpring;            //定时器显示弹簧效果
  65.         double angleSpring;             //弹簧角度

  66.         QAction *action_secondstyle;    //秒针样式右键菜单

  67. private slots:
  68.         void doAction();
  69.         void updateTime();
  70.         void updateSpring();

  71. public:
  72.         SecondStyle getSecondStyle()    const;

  73.         QColor getCrownColorStart()     const;
  74.         QColor getCrownColorEnd()       const;

  75.         QColor getForeground()          const;
  76.         QColor getBackground()          const;

  77.         QColor getPointerHourColor()    const;
  78.         QColor getPointerMinColor()     const;
  79.         QColor getPointerSecColor()     const;

  80.         QSize sizeHint()                const;
  81.         QSize minimumSizeHint()         const;

  82. public Q_SLOTS:
  83.         //设置秒针走动样式
  84.     void setSecondStyle(const SecondStyle &secondStyle);
  85.         //设置系统时间
  86.     void setSystemDateTime(const QString &year, const QString &month, const QString &day,
  87.    &n