要实现一个时钟小程序,我们首先想到需要以下的几个东西:
1. 时针
2.时针刻度
3.分针
4.分针刻度
5.秒针
要实现这个可以继承自QWidget,并在其中的paintEvent(QPaintEvent *event)Q_DECL_OVERLOAD;重载函数中来实现
具体代码如下:
- #ifndef ANALOGCLOCK_H
- #define ANALOGCLOCK_H
- #include<QtWidgets>
- class AnalogClock : public QWidget
- {
- Q_OBJECT
- public:
- explicit AnalogClock(QWidget *parent = 0);
- ~AnalogClock();
- signals:
- public slots:
- protected:
- //重载函数,实现窗口的重绘
- void paintEvent(QPaintEvent* evnet)Q_DECL_OVERRIDE;
- };
- #endif // ANALOGCLOCK_H
#ifndef ANALOGCLOCK_H
#define ANALOGCLOCK_H
#include<QtWidgets>
class AnalogClock : public QWidget
{
Q_OBJECT
public:
explicit AnalogClock(QWidget *parent = 0);
~AnalogClock();
signals:
public slots:
protected:
//重载函数,实现窗口的重绘
void paintEvent(QPaintEvent* evnet)Q_DECL_OVERRIDE;
};
#endif // ANALOGCLOCK_H
- #include "analogclock.h"
- #include<QtWidgets>
- AnalogClock::AnalogClock(QWidget *parent) : QWidget(parent)
- {
- //构造函数,设置定时器
- QTimer* timer = new QTimer(this);
- connect(timer ,SIGNAL(timeout()) ,this , SLOT(update()) );
- timer->start(1000);
- setWindowTitle(tr("Analog Clock"));
- resize(200 , 200);
- }
- AnalogClock::~AnalogClock()
- {
- }
- void AnalogClock::paintEvent(QPaintEvent *evnet)
- {
- //时针多边形
- static const QPoint hourHand[3] = {
- QPoint(7,8),
- QPoint(-7,8),
- QPoint(0,-40)
- };
- //分针多边形
- static const QPoint minuteHand[3] = {
- QPoint(7,8),
- QPoint(-7,8),
- QPoint(0, -70)
- };
- //秒针多边形
- static const QPoint secondHand[3] = {
- QPoint(7 , 8),
- QPoint(-7 , 8),
- QPoint(0 , -90)
- };
- //设置颜色
- QColor hourColor(127 , 0 , 127);
- QColor minuteColor(0 , 127 , 127 , 191);
- QColor secondColor(0 ,0 , 127 );
- int side = qMin(width() , height());
- //获取当前时间
- QTime time = QTime::currentTime();
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.translate(width()/2 , height()/2);
- painter.scale(side/200.0 , side/200.0);
- painter.setPen(Qt::NoPen);
- painter.setBrush(hourColor);
- painter.save();
- //旋转painter
- painter.rotate(30.0 * ((time.hour() + time.minute()/60.0)));
- //画指针多边形
- painter.drawConvexPolygon(hourHand , 3);
- painter.restore();
- painter.setPen(hourColor);
- //画时针的刻度
- for(int i = 0 ; i < 12; ++i){
- painter.drawLine(88 , 0 , 96 , 0);
- painter.rotate(30.0);
- }
- painter.setPen(Qt::NoPen);
- painter.setBrush(minuteColor);
- painter.save();
- painter.rotate(6.0 * (time.minute() + time.second()/60));
- painter.drawConvexPolygon(minuteHand , 3);
- painter.restore();
- painter.setPen(minuteColor);
- for(int j = 0 ; j < 60 ; ++j){
- if((j %5) != 0)
- {
- painter.drawLine(92 , 0 , 96 , 0);
- }
- painter.rotate(6.0);
- }
- painter.setPen(Qt::NoPen);
- painter.setBrush(secondColor);
- painter.save();
- painter.rotate(6.0 *(time.second()));
- painter.drawConvexPolygon(secondHand , 3);
- // painter.restore();
- painter.restore();
- }
具体如下:
- //#include "mainwindow.h"
- #include <QApplication>
- #include"analogclock.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- AnalogClock w;
- w.show();
- return a.exec();
- }
- 转载自https://blog.csdn.net/u011619422/article/details/47276211