0

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

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

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

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

4

3 回答 3

2

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

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

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

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

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

于 2013-02-06T08:11:35.170 回答
0

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

QEventLoop loop;
QTimer::singleShot(10000, &loop, SLOT(quit()));
loop.exec();
qDebug() << "after Singleshot";
于 2013-02-07T09:57:01.087 回答
0

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

首先,如果你使用你的计时器这样

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


test->isActive 

正在工作中。

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

把事情弄清楚一点。我检查某个值是否在文本文件中。如果它不存在,我将在 5 分钟内再试一次。如果是他们,我会启动一个计时器来计算大量时间。但是这个计时器只有在他从文件中取出值时才有效。所以如果我得到这个值,我会启动 1 秒计时器。在我在我的 MainWindows 构造器中启动这个计时器之前。如果这个计时器没有运行,一切都会像它应该的那样工作。

用户收到一条带有描述的消息,然后启动我的 MainWindow 并没有挂起。

感谢您的帮助问候克里斯

于 2013-02-07T07:56:22.657 回答