Qt 学习笔记 9.QTimer
1.QThread::msleep()
函数或 QTimer::singleShot()
函数来让程序暂停
- 使用
QThread::msleep()
函数
QThread::msleep()
函数可以让当前 线程 暂停一段时间。该函数接受一个整数参数(单位为毫秒),表示暂停的时间长度。
以下是使用
QThread::msleep()
函数让程序暂停1
秒的示例代码:
#include <QThread>
// ...
// 暂停1秒
QThread::msleep(1000);
- 使用
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
表达式的捕获列表。
以下是使用显式捕获列表来修复错误的示例:
QTimer::singleShot(5000, this, [this]() { // 正确的写法,显式地捕获了 this 指针
qDebug() << "指令尾出错";
WrongData2Text(rawData);
});
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgahebk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24