Qt停止应用程序一段时间

Qt Stop application for a certain time

本文关键字:一段时间 应用程序 Qt      更新时间:2023-10-16

我正在开发一个Qt应用程序。在程序中的某个时刻,我必须暂停应用程序,然后启动一个函数。

QTimer::singleShot(10000, this, SLOT(testFuntion()));
qDebug() << "after Singleshot";

这就是我的问题所在。计时器启动,我可以看到testFuntion()的输出,但它不会暂停应用程序。我可以在我的SingleShot之后立即看到qDebug的输出,10秒之后看到testFuntion()的输出。

你能帮我解决这个问题吗?或者有没有其他命令可以让我的应用程序暂停一段时间,然后运行一个函数?

它正在以应有的方式工作。此行:

QTimer::singleShot(10000, this, SLOT(testFuntion()));

将在计时器滴答作响时启动该功能。但是,计时器独立于应用程序的其余部分运行,因此在执行此行之后,主应用程序将继续到qDebug()行。

如果你真的想暂停应用程序(我真的不建议这样做,因为应用程序变得没有响应),你可以使用sleep()usleep()功能。

更好的方法是为用户显示某种通知(可能是进度条)。

我找到了一个非常简单的解决方案。

首先,如果你像这个一样使用计时器

QTimer *test = new QTimer();
test->isSingleshot(true);
connect(test, SIGNAL(timeout()), this, SLOT(testFunction()));
test->start(10000)

test->isActive 

正在工作。

但我只需要在我的应用程序中启动另一个计时器,只有当这个检查为真时。

把事情搞清楚一点。我检查文本文件中是否存在某个值。如果没有,我会在5分钟后再试一次。如果是他们,我会启动一个计时器来计算大量的时间。但只有当他从文件中取出Value时,这个计时器才会工作。因此,如果我得到这个值,我会启动1秒计时器。在我在MainWindows Construktor中启动这个计时器之前。如果这个计时器没有运行,一切都会正常工作。

用户收到一条带有描述的消息,然后启动我的主窗口,什么都没有挂起。

谢谢你的帮助问候Chris

您可以使用QEventLoop。与sleep相比,它的优势在于不会使应用程序无响应。它基本上创建了一个嵌套的事件循环。

QEventLoop loop;
QTimer::singleShot(10000, &loop, SLOT(quit()));
loop.exec();
qDebug() << "after Singleshot";