一、简述
在QT中实现自定义的时钟控件并可以实现与本机时间同步。
二、实现效果
三、工程文件
四、代码实现
1、背景图设置(此步根据需要添加)
QPainter painter(this);
//设置一个背景图片
QPixmap map(":/smsn.jpg");
QRect q1(0,0,864,864);
QRect q2(0,0,width(),height());
painter.drawPixmap(q2,map,q1);
2、设置定时器,时间间隔为1000毫秒,并且将定时器时间与update函数关联为信号和槽,定时器每过一个时间间隔发送信号,update作为槽函数,接到信号后自动调用paintEvent函数进行重绘。
QTimer *timer = new QTimer(this);
timer->start(1000);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
3、为达到较好效果,需要将坐标原点从界面的左上角平移至界面中心,并进行缩放,使得绘制出的表盘位于界面中心且大小合适
painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing);
painter.translate(width()/2,height()/2);//平移坐标系原点至界面中心点
painter.scale(side/300.0,side/300.0);//等比例缩放
4、分步依次将时钟的构成部分绘制出来(具体代码后面附上)
drawScale(&painter);//绘制刻度线
drawScaleNum(&painter);//绘制刻度值
drawHour(&painter);//绘制时针
drawMin(&painter);//绘制分针
drawSec(&painter);//绘制秒针
5、获取当前的时间
QTime time=QTime::currentTime();//获取本机当前时间
五、完整代码
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
void paintEvent(QPaintEvent *event);
public:
Widget(QWidget *parent = nullptr);
~Widget();
void drawCrown(QPainter *painter);
void drawBg(QPainter *painter);
void drawScale(QPainter *painter);
void