将应用程序代码放在QT应用程序上的位置?

时间:2010-06-18 19:36:55

标签: qt qt4 qt4.6

我从QT4开始,我想知道在哪里放置我的应用程序代码 这里吗?

void MainWindow::changeEvent(QEvent *e) {...}

还是在这? (究竟在哪里?)

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

如果我希望我的应用程序不仅对用户事件做出反应,而且在循环中定期执行,那么我在哪里放置循环?

2 个答案:

答案 0 :(得分:2)

Qt有自己的主循环,您可以使用QTimer类连接到它。

如果您想提供自己的事件循环,可以使用QApplication::processEvents()来指示Qt处理它的事件(并保持负责的UI)。

此外,QAbstractEventDispatcher可能对您有用。

This问题也可能有用。

答案 1 :(得分:2)

除非你在非gui线程中循环,否则你将通过循环(在隐式主gui线程中)来阻止GUI。这里有几种不同的方法:

  1. 使用主题。 Qt的信号和插槽是线程安全的。因此,在一个线程中,您可以调用您的模拟器(可能会阻塞),然后将其返回到调用线程。然后,您可以向GUI线程发出信号,该信号将响应信号并相应地更新GUI。
  2. 使用计时器。您可以将QTimer(或singleShot计时器)设置为零毫秒的延迟。这样可以在不阻塞循环的情况下尽可能多地调用插槽。如果插槽快速返回,这似乎不会阻止GUI并简化编程。
  3. 还有其他不同的方法,例如使用processEvents(),但我个人推荐线程方法。