运行 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
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 秒,做更多的事情并终止。
我想创建一个函数,比方说 (qDebug() << "result" ;)。我想在 2 秒后显示结果,延迟必须在此函数中实现。换句话说:
void MainWindow::my_function()
{
// Here I need something to make a delay of 2 secs
qDebug() << "result";
}
有没有什么方法可以让等待2秒然后执行下一行? 我正在寻找 QT 上最简单的方法。
我的建议是先阅读为什么睡眠是个坏主意,特别是当涉及到 GUIS 时.. 无论如何,你可以从 qt5
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 秒,做更多的事情并终止。