- #define WIDGET_H
-
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- QT_BEGIN_NAMESPACE
- namespace Ui { class Widget; }
- QT_END_NAMESPACE
-
- class Widget : public QWidget
- {
- Q_OBJECT
-
- public:
- Widget(QWidget *parent = nullptr);
- ~Widget();
-
-
- void paintEvent(QPaintEvent *event) override;
-
- private slots:
- void timeout_slot();
-
-
- private:
-
- Ui::Widget *ui;
-
- QTimer *timer;
-
- double h = 0;
- double m = 0;
- double s = 0;
- };
- #endif // WIDGET_H
- #include "widget.h"
- #include "ui_widget.h"
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- timer = new QTimer(this);
- timer->start(1000);//一秒钟
- connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
-
- void Widget::paintEvent(QPaintEvent *event)
- {
-
- //实例化一个画家
- QPainter painter(this);
-
- painter.setRenderHint(QPainter::Antialiasing);
- //实例化一个画笔
- QPen pen;
- pen.setColor(QColor("black"));
- pen.setStyle(Qt::SolidLine);
- pen.setWidth(7);
-
-
- //表盘
- painter.setPen(pen);
- painter.translate(this->width()/2, this->height()/2);
- painter.drawEllipse(QPoint(0, 0), 200, 200);
-
- //刻度
- pen.setWidth(4);
- painter.setPen(pen);
-
- for(int i = 1; i <= 60; i++)
- {
- painter.save();
- painter.rotate(i*6);
-
- if(!(i % 5))
- {
- painter.drawLine(0, -200, 0, -175);
- painter.drawText(-20, -170, 40, 40, Qt::AlignHCenter | Qt::AlignTop, QString::number(i/5));
- }
- else
- {
- painter.drawLine(0, -200, 0, -190);
- }
- painter.restore();
- }
-
- //时针
- painter.save();
- pen.setColor(QColor("yellow"));
- pen.setStyle(Qt::SolidLine);
- pen.setWidth(6);
-
- painter.setPen(pen);
- painter.rotate(30*h);
- painter.drawLine(0, 0, 0, -60);
- painter.restore();
-
- //分针
- painter.save();
- pen.setColor(QColor("red"));
- pen.setStyle(Qt::SolidLine);
- pen.setWidth(3);
-
- painter.setPen(pen);
- painter.rotate(6*m);
- painter.drawLine(0, 0, 0, -100);
- painter.restore();
-
- //秒针
- painter.save();
- pen.setColor(QColor("blue"));
- pen.setStyle(Qt::SolidLine);
- pen.setWidth(1);
-
- painter.setPen(pen);
- painter.rotate(6*(s+1));
- painter.drawLine(0, 0, 0, -160);
- painter.restore();
- update();
- }
-
- void Widget::timeout_slot()
- {
- QTime time = QTime::currentTime();
- h = time.hour();
- m = time.minute();
- s = time.second();
-
- }
-
3、效果图:
