Qt 编写时钟程序
Qt 编写时钟程序
下面就来看看用Qt如何编写一个时钟吧.第一步编写一个头文件。
//********mainwindow.h**********//
#ifndef MainWindow_H
#define MainWindow_H
#include <QWidget>
class Clock : public QWidget
{
Q_OBJECT public:
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**********//
到此为止就大功告成了,如有疑问可留言与本人联系,欢迎共同学习交流。
评论暂时关闭