参考文章:https://blog.csdn.net/anyuliuxing/article/details/96604213
概述:
实现一个定时器控件,右键直接转到槽函数.使用非常方便.
核心步骤:
1.在 .h 文件自定义定义一个信号,参考官方控件写法.Qtcreator会自动显示
2.New 一个默认启动的Qtimer ,把信号连接到一个函数,在函数里面调用自定义的信号就好.
代码示例:
#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);
}
效果展示: