Qt 自定义控件 定时器

参考文章:https://blog.csdn.net/anyuliuxing/article/details/96604213

概述:

实现一个定时器控件,右键直接转到槽函数.使用非常方便.

核心步骤:

1.在 .h 文件自定义定义一个信号,参考官方控件写法.Qtcreator会自动显示

2.New 一个默认启动的Qtimer ,把信号连接到一个函数,在函数里面调用自定义的信号就好.

代码示例:

/*
定时器控件 Qt 5.14.2
简介:
    1.实现界面右键转到槽就自动生成定时器回调函数
    2.可在属性栏直接修改定时器属性:Interval  Enable
    3.要有定时器图片,但是运行时在界面不绘制出来.(只要不把资源文件放过去就不会显示了,而且还方便.)
*/

#ifndef CTIMER_H
#define CTIMER_H

#include <QWidget>

namespace Ui {
class Ctimer;
}

class Ctimer :public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int timerInterval READ getInterval WRITE setInterval)
    Q_PROPERTY(bool timerEnable READ getEnable WRITE setEnable)
    Q_PROPERTY(QString timerName READ getName WRITE setName)

    Q_SIGNALS:                                    //定义此宏Qt creator右键转到槽会出现
    void    onTimer();

public slots:
    void    timerCallBack();

public:
    explicit Ctimer(QWidget *parent = nullptr);
    ~Ctimer();

    QTimer  *m_timer;
    int     timerInterval=1000;
    bool    timerEnable=1;
    QString timerName="没有名字";

    int     getInterval(){return timerInterval;};
    bool    getEnable(){return timerEnable;};
    QString getName(){return timerName;};

    void    setInterval(int _interval);
    void    setEnable(bool _enable);
    void    setName(QString _name);

    QSize   sizeHint() const override;              //控件缺省大小

private:
    Ui::Ctimer *ui;
};

#endif // CTIMER_H
#include "ctimer.h"
#include "ui_ctimer.h"
#include <QTimer>
#include <QStyleOption>
#include <QPainter>

Ctimer::Ctimer(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Ctimer)
{
    ui->setupUi(this);
    m_timer=new QTimer(this);
    connect(m_timer,&QTimer::timeout,this,&Ctimer::timerCallBack);
    m_timer->start(timerInterval);
}

Ctimer::~Ctimer()
{
    delete ui;
}

void Ctimer::setInterval(int _interval)
{
    timerInterval=_interval;
    m_timer->setInterval(timerInterval);
}

void Ctimer::setEnable(bool _enable)
{
    timerEnable=_enable;
    timerEnable?m_timer->start(timerInterval):m_timer->stop();
}

void Ctimer::setName(QString _name)
{
    timerName=_name;
}

void Ctimer::timerCallBack()
{
    onTimer();
}

QSize Ctimer::sizeHint() const
{
    return QSize(36,36);
}

效果展示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章