Qt 学习笔记 9.QTimer

这篇具有很好参考价值的文章主要介绍了Qt 学习笔记 9.QTimer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.QThread::msleep() 函数或 QTimer::singleShot() 函数来让程序暂停

  1. 使用 QThread::msleep() 函数

QThread::msleep() 函数可以让当前 线程 暂停一段时间。该函数接受一个整数参数(单位为毫秒),表示暂停的时间长度。

以下是使用 QThread::msleep() 函数让程序暂停 1 秒的示例代码:

#include <QThread>

// ...

// 暂停1秒
QThread::msleep(1000);
  1. 使用 QTimer::singleShot() 函数

QTimer::singleShot() 函数可以让程序在指定时间后执行一个 槽函数。大多数情况下,我们只是想等待一段时间然后执行某些代码,可以使用这个函数来实现。

以下是使用 QTimer::singleShot() 函数让程序暂停1秒的示例代码:

#include <QTimer>

// ...

// 暂停1秒
QTimer::singleShot(1000, this, []{
    // 执行需要暂停的代码
});

在上述代码示例中,我们使用 QTimer::singleShot() 函数让程序在 1 秒后执行一个 Lambda 表达式,其中包含需要暂停的代码。需要注意的是,如果需要在非 UI 线程中使用 QTimer::singleShot() 函数,还需要使用 QEventLoop 让非 UI 线程可以处理 QTimer 事件。

1.1QTimer::singleShot() 函数

QTimer::singleShot() 函数可以用来在指定的时间后执行一个特定的槽函数。该函数是 QTimer 的静态函数,不需要创建 QTimer 对象,通常用于实现延迟执行一些代码的需求。
QTimer::singleShot() 函数的声明如下:

void QTimer::singleShot(int msec, const QObject *receiver, const char *member);

该函数接受三个参数:

msec:指定的延迟时间,单位为毫秒。
receiver:接收到定时器信号后的对象。
member:接收到定时器信号后要执行的槽函数。可以是普通的槽函数或 Lambda 表达式。

QTimer::singleShot() 函数会在经过毫秒数为 msec 的时间后,将一个定时器事件放入事件队列中,然后马上返回。当指定的延迟时间到达时,事件循环将处理该定时器事件,调用接收到定时器信号的对象的指定槽函数。被调用的槽函数可以是 QObject 的任何已声明槽函数或 Lambda 表达式。

以下是一个使用 QTimer::singleShot() 函数延迟执行代码的示例,该示例演示了当按钮被点击时延迟执行一个槽函数的功能:

void MainWindow::on_pushButton_clicked()
{
    QTimer::singleShot(1000, this, [](){
        // 延迟1秒执行的槽函数
        qDebug() << "延迟1秒后执行";
    });
}

在该示例中,我们使用 QTimer::singleShot() 函数将一个定时器事件放入队列中,告知程序在 1000 毫秒后执行指定的槽函数。槽函数的执行内容为打印一条调试信息。可以看到,当按钮被点击时,程序并没有马上执行该槽函数,而是在经过 1 秒后才执行。这就实现了延迟执行某些代码的功能。

需要注意的是,QTimer::singleShot() 函数只会执行 一次,如果需要重复执行某个操作,需要使用 QTimer 类提供的其他函数。

2.报错分析

报错代码

QTimer::singleShot(5000, this, []{// 暂停 5 秒
// 执行需要暂停的代码
qDebug() << “指令尾出错”;
WrongData2Text(rawData);// 错误指令写到 text 中
});

错误内容:‘this’ cannot be implicitly captured in this context.

错误原因

Lambda 表达式在捕获 this 指针时未显式地给定符号 [ ] 内的捕获模式。

Lambda 表达式中使用 this 指针时,需要注意它所在的上下文。如果 Lambda 表达式在类中定义,而且捕获了 this 指针,那么 this 将指向该类的实例。在此情况下,为确保 this 能被正确捕获,我们必须显式地给定 Lambda 表达式的捕获列表。

以下是使用显式捕获列表来修复错误的示例:文章来源地址https://www.toymoban.com/news/detail-543012.html

QTimer::singleShot(5000, this, [this]() { // 正确的写法,显式地捕获了 this 指针
    qDebug() << "指令尾出错";
    WrongData2Text(rawData);
});

到了这里,关于Qt 学习笔记 9.QTimer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6 Qt Quick UI原型学习QML第七篇

    导入 QtQuick 2.12 导入 QtQuick.Window 2.12 导入 QtQuick.Controls 2.12 导入 QtQuick.Layouts 1.3 导入 Qt.labs.calendar 1.0 矩形 { id: root 属性 int duration: 3000 } 这段代码使用了QtQuick库来创建一个用户界面。其中的Rectangle是界面的根元素。 id: root : 为Rectangle元素指定唯一的标识符root。 property int durat

    2024年02月16日
    浏览(40)
  • Qt6 Qt Quick UI Prototype学习QML第一篇

    创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当您正在进行原型设计时才使用此功能。您无法使用此创建完整的应用程序。请考虑使用Qt Quick application项目 Qt Quick UI原型主要用于快速创建交互式的用户界面(UI)原型。它

    2024年02月16日
    浏览(49)
  • Qt音视频开发38-ffmpeg视频暂停录制的设计

    基本上各种播放器提供的录制视频接口,都是只有开始录制和结束录制两个,当然一般用的最多的也是这两个接口,但是实际使用过程中,还有一种可能需要中途暂停录制,暂停以后再次继续录制,将中间部分视频不需要录制,跳过这部分不需要的视频,而且录制的视频文件

    2023年04月20日
    浏览(75)
  • C/C++笔记-使用Qt的UI文件时make流程

    首先创建如下项目: QtWidgetMakfileDemo.pro Widget.h main.cpp Widget.cpp ui是空的。 此时运行命令qmake,然后再make,打印如下: 整体逻辑是这样的: ①将ui文件生成对应的C++的.h文件; ②将.cpp编译成.o文件; ③将带有Q_OBJECT和继承了QObject的类生成对应的moc_xxx.cpp文件; ④编译moc文件,

    2024年02月05日
    浏览(38)
  • QT5.9实现一个视频播放器播放 暂停进度条

    参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035 参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986 通过选择按钮选择本地视频文件 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容 点击暂停按钮

    2023年04月22日
    浏览(47)
  • 【Qt 学习笔记】Qt 开发环境的搭建 | Qt 安装教程

    博客主页:Duck Bro 博客主页 系列专栏:Qt 专栏 关注博主,后期持续更新系列文章 如果有错误感谢请大家批评指出,及时修改 感谢大家点赞👍收藏⭐评论✍ 文章编号:Qt 学习笔记 / 02 1. 安装包下载(网盘链接) 链接:https://pan.baidu.com/s/1t3jbYcFYFuJIfe0hPmeDmQ?pwd=duck 提取码:du

    2024年04月26日
    浏览(99)
  • QT笔记——QT类反射机制简单学习

    学习 QT的 类反射机制 使用Qt 反射机制的条件 1.需要继承自QObject 类 或者 它的 派生类 ,并需要在类中加入Q_OBJECT 宏 2.注册成员函数:若希望普通成员函数能够被反射,需要在函数声明之前加入Q_INVOKABLE 宏。 3.注册成员变量:若希望成员变量能被反射,需要使用Q_PROPERTY 宏。

    2024年02月09日
    浏览(122)
  • Qt学习1:ui界面显示实时时间(自己学习用)

    Qt获取系统当前时间,ui界面显示实时时间和日期。 一、ui放入Qlabel 开关按钮是控制灯的,不用管。 1. 静态时间显示用虚拟text 二、.cpp添加代码 槽是 C++ 成员函数,可以被调用。 private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。(一对一关系) 在

    2024年02月08日
    浏览(46)
  • QT学习笔记-QT安装oracle oci驱动

    在使用QT开发应用的过程中,往往会把应用使用过程中产生的数据放入数据库进行统一存储,因此通过QT实现数据库的访问可以说是必须的一个知识点,其实QT访问数据库的语法及相关类和方法的使用并不复杂,但是对于使用QT的新人来说往往会开在数据库驱动加载的地方,比

    2024年02月12日
    浏览(55)
  • Qt学习笔记5---如何在Qt中添加资源文件

              前言: 在我们给Qt加上图片的时候,可以用本地资源添加的方式,但是此方法代码用的只能是本地资源,不好共享。那么我们可以把资源文件添加在Qt中,这样就不会出现这种问题啦! 第一步:在本地复制你想用的资源文件,点开项目的“在Explorer中显示”,粘贴

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包