在 QT 中运行延迟的函数

Run a function with a delay in QT

本文关键字:函数 延迟 运行 QT      更新时间:2023-10-16

我想创建一个函数,假设(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,因为这会起作用,但也会冻结主窗口,这在考虑用户体验等时不是一个好主意