【发布时间】:2011-06-09 08:45:32
【问题描述】:
我已经为此工作了几个小时,无法弄清楚,也找不到任何有效的在线帮助。基本上,我想要完成的要点是拥有一个带有按钮和QTextBrowser 的 Qt GUI。当我按下按钮时,我希望它显示一条消息,然后每 10 秒打印一次此消息。
我想我会使用 QTimer,因为有一个计时器每 10 秒显示一次消息是有意义的。当我最初将它实现到我的 `buttonClicked() SLOT 中时,它导致程序冻结。我在网上寻找解决方案,发现 QApplication::processEvents()。
所以基本上在我的函数中我有这样的东西:
while(1)
{
QTimer *timer;
connect(...) //omitted parameters for this example
timer.start(10000);
ui->diplay->append("Message");
while(timer.isActive())
{
QApplication::processEvents()
}
}
我认为它会打破 timer.isActive() while 循环,但它不会简单地停留在那里。
所以我认为这是一个线程问题。所以我想出了如何使用 QThreads 但我仍然无法让它工作。基本上,当我创建一个带有计时器的线程并且线程告诉计时器启动时,程序关闭并且控制台显示“程序意外完成”。
必须有一种简单的方法来做到这一点,但我使用 Qt 的记录一直是这样的
【问题讨论】:
-
更新:我现在正在使用 timer->singleShot(timer, SIGNAL(timeout()), this, SLOT(update()));但我需要程序打印消息并等待 10 秒,然后才能继续处理。我把它放在一个while循环中,所以它不断地做singleShots而不是每10秒一次。有什么建议?谢谢!
-
几乎每个人都忽略了这样一个事实,即这是在 while (1) 循环中发生的吗?难怪程序会冻结。
标签: multithreading qt qt4 timer qthread