myclock.h #ifndef ANALOGCLOCK_H #define ANALOGCLOCK_H //#include <QWidget>原版 #include <QtGui>//强哥版 class MyClock : public QWidget { Q_OBJECT public: MyClock(QWidget *parent = 0); protected: void paintEvent(QPaintEvent *event); }; #endif myclock.cpp #include <QtGui> #include "myclock.h" MyClock::MyClock(QWidget *parent) : QWidget(parent) /*不加QWidget(parent)就出现传说中的"未使用的参数parent"*/ { QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); QIcon ico("4.jpg"); /*添加图标*/ this->setWindowIcon(ico); setWindowTitle(tr("My Clock"));/*设置标题*/ resize(600, 600); this->move(300,100); } void MyClock::paintEvent(QPaintEvent *) { /*设计三个指针形状*/ static const QPoint hourHand[3] = { QPoint(4, 5), QPoint(-4, 5), QPoint(0, -40) }; static const QPoint minuteHand[3] = { QPoint(3, 4), QPoint(-3, 4), QPoint(0, -70) }; static const QPoint secondHand[3] = { QPoint(1,1), QPoint(-1,1), QPoint(0,-90) }; QColor hourColor(127, 0, 127); QColor minuteColor(0, 127, 127, 191); QColor secondColor(255,0,0); 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); /* void QPainter::rotate ( qreal angle ) Rotates the coordinate system the given angle clockwise. 按给定角度顺时针旋转*/ } 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.setPen(secondColor); for (int k = 0; k < 60; ++k) { if ((k % 5) != 0){ painter.drawLine(96, 0, 96, 0); } painter.rotate(6.0); } } main.cpp #include <QApplication> #include "myclock.h" int main(int argc, char **argv) { QApplication app(argc, argv); MyClock clock; clock.show(); return app.exec(); } myclock.pro HEADERS=myclock.h SOURCES=myclock.cpp / main.cpp TARGET=myClock