我想创建一个函数,比方说(qDebug()<<“ result”;)。我想在2秒后显示结果,延迟必须在此函数中实现。换句话说:
void MainWindow::my_function()
{
// Here I need something to make a delay of 2 secs
qDebug() << "result";
}
是否存在允许等待2秒钟然后执行下一行的方法或东西? 我正在寻找QT上最简单的方法。
答案 0 :(得分:2)
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,因为这可以工作,但也会冻结主窗口,考虑用户体验等时,这不是一个好主意
答案 1 :(得分:2)
请勿(滥用)睡眠功能
睡眠功能是一种非常易于滥用的专用工具,Qt为您提供了许多更好的选择。因此,除非您知道自己在做什么,否则不要使用睡眠功能(如果只是为了避免养成不良习惯)。
那么,您有什么选择?
如果只需要2秒的延迟时间(例如,在用户按下按钮后),则可以使用QTimer::singleShot()
,它会在计时器到期后调用该函数,例如
QTimer::singleShot(2000, this, &MainWindow::printResultFunction)
或者您可以使用本地QEventLoop
,您将exec
QEventLoop loop;
QTimer::singleShot(2000, &loop, &QEventLoop::quit);
loop.exec();
然后使用计时器退出(再次),例如
var data = grid.dataSource.data();
for (i = 0; i < data.length; i++)
{
if (data[i].FirstName.trim() != "") {
var obj = {};
obj.FirstName = data[i].FirstName;
obj.UserId = data[i].UserId;
}
}
或者您可以启动一个单独的线程来执行您的函数,并在此函数中使用( gasp )QThread::msleep()
正如我之前所说的,睡眠函数是一种专用工具-在这里您知道您在做什么。您不会停止GUI线程和qt事件。您正在暂停执行旨在执行一件事的线程:执行任务,等待2秒,执行更多任务并终止。