下面就来看看用Qt如何编写一个时钟吧. 第一步编写一个头文件。//********mainwindow.h**********//#ifndef MainWindow_H#define MainWindow_H#include <QWidget>class Clock : public QWidget{ Q_OBJECTpublic: Clock(QWidget *parent = 0);protected:void paintEvent(QPaintEvent *event);};#endif // MainWindow_H//********END END END END**********////由于具有signal,slot机制的类,所以在此需要声明Q_OBJECT//重绘用的事件处理函式void paintEvent(QPaintEvent *event); //********mainwindow.cpp**********//#include <QtGui> #include "mainwindow.h" Clock::Clock(QWidget *parent): QWidget(parent) { //声明一个定时器 QTimer *timer = new QTimer(this); //连接信号与槽 connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); //注意单位,1000代表的是毫秒,所以表示每秒刷新一次 //设置窗体名称与大小 setWindowTitle(tr("Clock")); resize(400,400); } void Clock::paintEvent(QPaintEvent *) { //下面三个数组用来定义表针的三个顶点,以便后面的填充 static const QPoint hourHand[3] = { QPoint(5, 14), QPoint(-5, 14), QPoint(0, -50) }; static const QPoint minuteHand[3] = { QPoint(5, 14), QPoint(-5,14), QPoint(0, -70) }; static const QPoint secondHand[3] = { QPoint(5, 14), QPoint(-5, 14), QPoint(0, -80) }; //在此分别设定各表针所填充的颜色 QColor hourColor(127, 0, 127); QColor minuteColor(0, 127, 127, 191); QColor secondColor(127, 127,0,120); //绘制的范围 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.setPen( Qt::red ); //画刷颜色设定 painter.setBrush(hourColor); //保存状态 painter.save(); painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));//坐标轴旋转的角度 //填充时针的区域 painter.drawConvexPolygon(hourHand, 3);//根据三个坐标点绘图 //恢复填充前的状态 painter.restore(); //下面画表示小时的刻度 painter.setPen(Qt::red); //十二个刻度,循环下就好了 for (int i = 0; i < 12; ++i) { //没次都是这样,先画跳线,再转个角 painter.drawLine(80, 0, 100, 0); painter.rotate(30.0); } //以下代码和上面的类似,可对应起来参考理解 painter.setPen(Qt::blue); 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(90, 0, 100, 0); painter.rotate(6.0); } painter.setPen(Qt::black); painter.setBrush(secondColor); painter.save(); painter.rotate(6.0*time.second()); painter.drawConvexPolygon(secondHand,3); painter.restore(); }//********END END END END**********// //********main.cpp**********//#include <QApplication>#include "mainwindow.h"int main(int argc, char *argv[]){ QApplication app(argc, argv);//声明下,再show出来就可以了 Clock clock; clock.show();return app.exec();}//********END END END END**********//到此为止就大功告成了,如有疑问可留言与本人联系,欢迎共同学习交流。