QT入门开发一个时钟

QT入门开发一个时钟
本文讲述了时钟开发的具体过程以及代码 。
涉及到一下几个知识点:定时器使用本地时间获取资源读取图片绘制图片按照中心旋转sin或者cos角度计算 。
样例如下图:
定时器使用
是定时器类,我们可以使用来设置定时器 。
定时器中重要的几个函数:
stop() // 停止,定时器停止,有时候我们希望他不执行形式任务的时候 。可以使用start() // 开始,开始执行定时任务,定时触发timetou信号setInterval(int) // 设置定时时长,按照毫秒 1秒=1000毫秒,note:定时任务并不是准确无误的,偶尔由于你的cpu占用过大,他的时间不一定准确的按照你设置的时间进行执行
本地时间获取
QTime 获取时间使用,也可以用来做时间的格式化 。QTime::currentTime() 获取本地时间 。fTimeCounter = QTime::currentTime(); // m_min = fTimeCounter.minute();// 获取分钟m_second = fTimeCounter.second();// 获取秒m_hour = fTimeCounter.hour();// 获取小时

QT入门开发一个时钟

文章插图
资源读取
我们可以将资源存储在程序中以方便使用 。
新建资源
编辑资源
添加文件之前需要添加前缀
资源添加后不要删除本地的文件,因为这里的资源添加只是做了映射,并没有拷贝到程序中,所以本地文件不要删除 。(被添加文件在本地的位置不要一定或者删除)
资源的读取通过""作为开头 。
图片绘制
QT入门开发一个时钟

文章插图
QPixmap img;img.load(":/2.png");QPixmap img2 = rotateImageWithTransform(img,6*m_second);// 使用画笔painter调用drawPixmap绘制painter->drawPixmap(m_centX-img2.width()/2,m_centY-img2.height()/2,img2);
图片按照中心旋转
QPixmap MainWindow::rotateImageWithTransform(const QPixmap &src, int angle){QMatrix matri;//迁移到中心matri.translate(src.width()/2.0,src.height()/2.0);//中心旋转matri.rotate(angle);//回退中心matri.translate(-src.width()/2.0,-src.height()/2.0);//执行坐标映射变化//旋转后图像大小变化了 需要提前进行裁剪 如果在旋转后裁剪//则需要计算使用三角函数计算//中心偏移int cubeWidth = qMin(src.width(),src.height());QRect cubeRect(0,0,cubeWidth,cubeWidth);cubeRect.moveCenter(src.rect().center());qDebug()<<" cube "<
sin或者cos角度计算 。
【QT入门开发一个时钟】sin按照弧度计算,因此需要做角度与弧度计算,例如:30 (度) = 30/180 * 3. (弧度)
源代码
代码如下:
.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include #include #include #define WIN_WIDTH 500#define WIN_HEIGHT 500class MainWindow : public QMainWindow{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();private:int m_centX;// x中心点int m_centY;// y中心点int m_distance;// 距离int m_min;// 分钟int m_hour;// 小时int m_second;//intindex = 1;QTimer *fTimer; //定时器QTime fTimeCounter;//计时器private slots:void on_timer_timeout () ; //定时溢出处理槽函数// QWidget interfaceprotected:void paintEvent(QPaintEvent *event);void drawBackground(QPainter *painter);void drawHourHand(QPainter *painter);void drawMinuteHand(QPainter *painter);void drawSecondHand(QPainter *painter);QPixmap rotateImageWithTransform(const QPixmap &src, int angle);};#endif // MAINWINDOW_H