运行 QT有延迟的函数

Run a function with a delay in QT

我想创建一个函数,比方说 (qDebug() << "result" ;)。我想在 2 秒后显示结果,延迟必须在此函数中实现。换句话说:

void MainWindow::my_function()
{
     // Here I need something to make a delay of 2 secs
      qDebug() << "result";
}

有没有什么方法可以让等待2秒然后执行下一行? 我正在寻找 QT 上最简单的方法。

我的建议是先阅读为什么睡眠是个坏主意,特别是当涉及到 GUIS 时.. 无论如何,你可以从 qt5

Functions of 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";
}

但正如我之前所说,请阅读第 1 条,因为这会起作用,但也会冻结主 window,考虑到用户体验等因素时,这不是一个好主意

不要(误)使用睡眠功能

睡眠函数是一种非常容易被误用的专用工具,Qt 为您提供了很多更好的选择。因此,除非您知道自己在做什么,否则不要使用睡眠功能(如果只是为了避免养成坏习惯的话)。

那么,你有什么选择?

如果您只需要 2 秒的延迟(例如,在用户按下按钮后),您可以使用 QTimer::singleShot(),它会在计时器到期后调用该函数,例如

QTimer::singleShot(2000, this, &MainWindow::printResultFunction)

或者您可以使用本地 QEventLoop,您将 exec 然后使用计时器退出(再次),例如

QEventLoop loop;
QTimer::singleShot(2000, &loop, &QEventLoop::quit);
loop.exec();

或者你可以启动一个单独的线程,它执行你的函数并在这个函数中使用 (gasp) QThread::msleep() 正如我之前所说的睡眠函数是一个专门的工具- 在这里你知道你在做什么。您不会停止 GUI 线程和 qt 事件。您正在暂停一个旨在做一件事的线程的执行:做一些事情,等待 2 秒,做更多的事情并终止。