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);
}

效果展示:

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