在 QT 中运行延迟的函数
Run a function with a delay in QT
我想创建一个函数,假设(qDebug((<<"结果";)。我想在 2 秒后显示结果,延迟必须在此函数中实现。换句话说:
void MainWindow::my_function()
{
// Here I need something to make a delay of 2 secs
qDebug() << "result";
}
有没有一种方法或东西可以等待 2 秒然后执行下一行? 我正在寻找QT上最简单的方法。
不要(误(使用睡眠函数
睡眠功能是一个专门的工具,非常容易被滥用,Qt给你提供了很多更好的选择。所以不要使用睡眠功能,除非你知道自己在做什么(如果只是为了避免养成坏习惯(。
那么,您有什么选择?
如果您只想要 2 秒的延迟(例如,在用户按下按钮之后(,您可以使用一个QTimer::singleShot()
,它将在计时器到期后调用该函数,例如
QTimer::singleShot(2000, this, &MainWindow::printResultFunction)
或者您可以使用本地QEventLoop
您将exec
然后(再次(使用计时器退出,例如
QEventLoop loop;
QTimer::singleShot(2000, &loop, &QEventLoop::quit);
loop.exec();
或者你可以启动一个单独的线程,它执行你的函数,在这个函数中使用(喘息(QThread::msleep()
正如我之前所说,睡眠函数是一个专门的工具 - 在这里你知道你在做什么。您不会停止 GUI 线程和 qt 事件。您正在暂停执行旨在执行一件事的线程:执行操作,等待 2 秒,执行更多操作并终止。
我的建议是先阅读为什么睡眠是一个坏主意,特别是当涉及GUIS时。 无论如何,你可以从Qt5
QThread的功能
void msleep(unsigned long msecs);
void sleep(unsigned long secs);
void usleep(unsigned long usecs);
在代码中使用它,您可以
void MainWindow::my_function(){
// Here I need something to make a delay of 2 secs
sleep(2);
qDebug() << "result";
}
但正如我之前所说,请阅读 1st,因为这会起作用,但也会冻结主窗口,这在考虑用户体验等时不是一个好主意
相关文章:
- 如何仅为一个函数添加延迟
- 将自定义函数传递到基抽象类中以延迟执行
- C++延迟后的优化器调用函数
- 将作业传递给另一个函数,而不会延迟 arduino
- 在 QT 中运行延迟的函数
- 延迟函数使打开的框架窗口冻结,直到指定的时间过去
- 异步 60 秒延迟后C++执行函数?
- 在Qt中,如何延迟成员函数的返回,直到收到信号?
- 如何在不使用C++冻结线程的情况下延迟函数
- 函数参数的延迟销毁
- 内联lambda是否遭受与函数指针间接寻址相同的延迟
- 关于QStateMachine延迟函数的说明
- 延迟函数调用中的延迟函数调用
- C/C 的DOS.H中的函数/延迟/nosound
- 延迟评估模板类型函数
- 我可以使用GCC通过存储的函数指针内联延迟调用吗
- 延迟加载DLL时的函数原型
- Lua/C++/luabind /与其他 lua 行为脚本交互中成员函数的执行延迟
- 延迟 crtp 基类中的成员函数实例化
- 如何在不使用 sleep() 的情况下使用 ontimer 函数延迟进程