【QT】自定义时钟控件

一、简述

在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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值