欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > QT 定时器事件

QT 定时器事件

2024/10/25 9:29:05 来源:https://blog.csdn.net/weixin_64918301/article/details/142106149  浏览:    关键词:QT 定时器事件

 UI

一、通过 QTimer 类对象实现

1、头文件

1)引用 QTimer类 头文件,声明 QTimer 类对象  

2)声明 超时响应(槽函数)

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QTimer>//定时器类
#include <QTime>//时间类
#include <QTimerEvent>//定时器事件类
#include <QDateTime>//日期时间类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();//按键响应槽函数void timeout_slot();//声明自定义超时响应槽函数private:Ui::Widget *ui;//声明时间类对象QTimer t;};
#endif // WIDGET_H

 2、在 原文件 中 定义按键响应函数 超时响应槽函数

1)在 Widget 的构造函数中 连接 信号与槽(因为只用连接一次)

2)定义按键响应槽函数

3)定义超时响应函数

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//信号与槽绑定connect(&t,&QTimer::timeout,this,&Widget::timeout_slot);
}Widget::~Widget()
{delete ui;
}//定义按键响应槽函数
void Widget::on_pushButton_clicked()
{if(ui->pushButton->text() == "启动"){//启动定时器t.start(100);//间隔指定时间发送一个timeout的信号//更新按键文本ui->pushButton->setText("关闭");}else{//关闭定时器t.stop();//更新按键文本ui->pushButton->setText("启动");}
}//定义超时响应函数
void Widget::timeout_slot()
{//static int num = 0;//ui->label->setNum(num++);//获取系统时间QTime systime = QTime::currentTime();//QTiem -> QStringQString tm = systime.toString("hh:mm:ss");//更新label文本ui->label->setText(tm);//设置标签位置ui->label->setAlignment(Qt::AlignCenter);//完全居中
}

二、使用 事件处理函数 完成

        事件处理函数是 QTimerEvent类 中的一个虚函数,通过重载自定义功能

1、头文件

1)引用 QTimerEvent类 头文件 

2)声明 按键响应槽函数

3)定义一个 int 型 变量,用于记录 定时器id

4)声明 事件处理函数 重载

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QTimer>//定时器类
#include <QTime>//时间类
#include <QTimerEvent>//定时器事件类
#include <QDateTime>//日期时间类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots://声明按键响应槽函数void on_pushButton_2_clicked();private:Ui::Widget *ui;int tid = 0;//定时器id号//声明 事件处理函数 重载void timerEvent(QTimerEvent *event) override;};
#endif // WIDGET_H

2、原文件

1)定义按键响应槽函数

2)定义(重载)事件处理函数

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}//定义按键响应槽函数
void Widget::on_pushButton_2_clicked()
{if(ui->pushButton_2->text() == "启动"){//启动定时器tid = this->startTimer(100);//每隔100ms自动调用定时器事件处理函数//更新按键文本ui->pushButton_2->setText("关闭");}else{//关闭定时器t.stop();//更新按键文本ui->pushButton_2->setText("启动");}
}//定义(重载)事件处理函数
void Widget::timerEvent(QTimerEvent *event)
{//判断定时器编号if(event->timerId() == tid){ui->label_2->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));ui->label_2->setAlignment(Qt::AlignCenter);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com