我正在开发一个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中启动此计时器之前。如果此计时器未运行,则一切正常。
用户获取带有描述的消息,然后启动我的MainWindow和nothings挂起。
感谢帮助问候克里斯
你可以使用QEventLoop。它优于sleep
的优势在于它不会使您的应用程序无响应。它基本上创建了一个嵌套的事件循环。
QEventLoop loop;
QTimer::singleShot(10000, &loop, SLOT(quit()));
loop.exec();
qDebug() << "after Singleshot";