Qt之实现一个模拟时钟
时间: 2018-09-18来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
1、创建QtGUI应用,基类选择QWidget,取消创建界面,类名Anolog Clock
2、analogclock.h头文件: #ifndef ANALOGCLOCK_H #define ANALOGCLOCK_H #include <QWidget> #include <QPainter> class AnalogClock : public QWidget { Q_OBJECT public: AnalogClock(QWidget *parent = 0); ~AnalogClock(); protected: void paintEvent(QPaintEvent *event); }; #endif // ANALOGCLOCK_H
analogclock.cpp: #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); } void AnalogClock::paintEvent(QPaintEvent *event) { 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, 12, 127, 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.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.0)); 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.end(); } AnalogClock::~AnalogClock() { }

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行