当前位置: 首页 > news >正文

19、QTimer类(待补充)---------QT基础

QTimer类(待补充)

QTimer 是 Qt 提供的一个定时器类,继承自 QObject。它允许应用程序在事件循环中安排定时事件,当定时器达到设定的时间间隔后,会触发 timeout() 信号。通过连接该信号到相应的槽(Slot),可以实现定时执行特定操作。
主要特点:

●周期性执行:设置一个时间间隔,定时器每隔该间隔触发一次。
●单次执行:定时器在达到指定时间间隔后只触发一次。
●集成事件循环:与 Qt 的事件循环紧密集成,保证定时操作的可靠性。
周期性定时器
周期性定时器会在每个时间间隔到达时连续触发,适用于需要定期执行的任务。

步骤:

1创建 QTimer 对象。
2连接 timeout() 信号到相应的槽函数。
3设置时间间隔(以毫秒为单位)。
4启动定时器。
演示案例

class MyTicker : public QObject { Q_OBJECT public: explicit MyTicker(QObject *parent = nullptr):QObject(parent){ // 创建定时器 QTimer *timer = new QTimer(this); // 连接 timeout 信号到槽函数 connect(timer, &QTimer::timeout, this, &MyTicker::onTimeout); // 设置时间间隔为1000毫秒(1秒) timer->start(1000); } signals: public slots: //定时器每次到时间后执行的槽函数 void onTimeout(){ // 定时器触发时执行的代码 qDebug("定时器触发"); } };

在main函数中创建一个MyTicker,

int main(int argc, char *argv[]) { QApplication a(argc, argv); MyTicker ticker; MainWindow w; w.show(); return a.exec(); }

启动程序后会看到控制台不断输出日志

定时器触发 定时器触发 定时器触发 定时器触发

单次定时器

单次定时器在指定的时间间隔后只触发一次,适用于需要延迟执行某个操作的场景。

方法:

  • 使用QTimer::singleShot()静态函数。

我们自定义一个类,在构造函数里构造一个单次触发的定时器

#include <QObject> #include <QTimer> class MySingleShot : public QObject { Q_OBJECT public: MySingleShot(QObject *parent = nullptr) : QObject(parent) { // 设定延迟时间为2000毫秒(2秒),触发一条消息 QTimer::singleShot(2000, this, SLOT(onSingleShot())); } signals: public slots: void onSingleShot() { // 单次定时器触发时执行的代码 qDebug("单次定时器触发"); } };

接下来在main函数中调用

int main(int argc, char *argv[]) { QApplication a(argc, argv); MySingleShot singleshot; MainWindow w; w.show(); return a.exec(); }

运行程序后能看到单次触发的定时器只触发了一次。

企业中的应用

在 Qt 中,可以使用QThread::sleep()函数来使当前线程暂停指定的秒数。这个函数是静态的,属于QThread类。以下是使用QThread::sleep()的一个简单示例:

#include <QCoreApplication> #include <QThread> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "Sleeping for 3 seconds..."; QThread::sleep(3); // 暂停3秒 qDebug() << "Awake!"; return a.exec(); }

请注意,使用这些函数会阻塞当前线程,因此在 GUI 应用程序中使用时要小心,因为它们会导致界面无响应。如果需要在 GUI 应用程序中进行延迟操作,通常可以使用QTimer来实现。

void Delay_MSec(unsigned int msec) { //定义一个新的事件循环 QEventLoop loop; //创建单次定时器,槽函数为事件循环的退出函数 QTimer::singleShot(msec, &loop, SLOT(quit())); //事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出 loop.exec(); }

拓展知识

QTimer 的常用函数

  • start(int msec):启动定时器,时间间隔为msec毫秒。如果定时器已经在运行,则重启定时器。
  • start():启动已经设置了时间间隔的定时器。
  • start(int msec, QObject*receiver, Pointer to member function):启动单次定时器,并在超时时调用指定的槽。
  • stop():停止定时器。
  • isActive():检查定时器是否处于活动状态。
  • singleShot(int msec, const QObject*receiver, Pointer to member function):启动一个单次定时器。
  • setInterval(int msec):设置定时器的时间间隔。
  • interval() const:获取定时器的时间间隔。
http://www.jsqmd.com/news/489421/

相关文章:

  • 全屋智能不被 “网” 住[特殊字符] Home Assistant+cpolar 解锁远程控家新体验
  • 判断是不是素数题目
  • 2026年比较好的VR身心调试系统采购品牌推荐:VR身心调试系统解决方案/VR身心调试系统资质齐全热门公司推荐 - 行业平台推荐
  • 2026年口碑好的玻璃钢罐品牌推荐:玻璃钢防腐罐/储罐玻璃钢罐销售厂家推荐 - 行业平台推荐
  • 排序Java
  • 2026年降AI率一次过的工具有哪些?别再反复修改了
  • 2026年质量好的冷水塔工厂推荐:冷却水塔/方形冷却塔/玻璃钢冷却塔厂家选择指南 - 行业平台推荐
  • 面试趣事:陈千语的Java面试历险记
  • 2026年评价高的VR身心调试系统公司推荐:VR身心调试系统设备/VR身心调试系统资质齐全/VR身心调试系统解决方案推荐公司 - 行业平台推荐
  • 木马的排除与防护
  • 2026年热门的盐酸储罐厂家推荐:玻璃钢罐/玻璃钢贮罐/玻璃钢防腐罐公司口碑推荐 - 行业平台推荐
  • 064远程教育网站系统-springboot+vue
  • 专业术语简介【三】降熵、第一性原理
  • JavaScript性能优化实战烈嘿
  • 2.【.NET10 实战--孢子记账--产品智能化】--升级前的准备工作:项目依赖梳理与升级计划制定
  • 【亲测免费】 探秘未来终端:X-CMD - 你的云上弹指神通!
  • JVM太难了!快来学习!
  • 华为AR 1200-s 路由器开启WEB
  • 网络安全的进一步学习
  • Hadoop完全分布式安装
  • IDEA各版本支持的Java 版本和功能
  • 【HTTP】HTTP请求方法与状态码(全体系知识总结+附表格)
  • Windows 10 RS2及以上系统中使用TDL的注意事项:IRQL级别变化与驱动开发调整
  • 前端实现网页转PDF矢量文件,高清还原网页内容
  • 我用 OpenClaw 7 天,砍掉了 80% 的重复沟通
  • 骑砍2霸主MOD开发(10)-游戏实例GameEntity
  • 为什么说数字化转型非常重要?2026企业级AI Agent与RPA选型实测指南
  • 前端面试基础知识整理【Day-11】
  • 贡献者必读:如何参与SIMP开源项目并提交高质量代码
  • 【雷达干扰】基于CFastICA交叉极化干扰对消-独立成分分析附Matlab代码