0

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

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

还是这里?(具体在哪里?)

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

如果我希望我的应用不仅对用户事件做出反应,而且要定期执行循环,我应该把循环放在哪里?

4

2 回答 2

2

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

如果你想提供你自己的事件循环,你可以使用QApplication::processEvents( ) 来通知 Qt 来处理它的事件(并保持一个负责任的 UI)。

此外,QAbstractEventDispatcher可能对您有用。

这个问题也可能有用。

于 2010-06-18T20:55:34.797 回答
2

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

  1. 使用线程。Qt 的信号和槽是线程安全的。因此,在一个线程中,您可以调用您的模拟器(可能会阻塞),然后它将数据返回给调用线程。然后,您可以向 GUI 线程发出信号,该线程将响应该信号并相应地更新 GUI。
  2. 使用计时器。您可以使用设置为延迟为零毫秒的QTimer(或singleShot计时器)。这可以在不阻塞循环的情况下尽可能频繁地调用您的插槽。如果插槽快速返回,这似乎不会阻塞 GUI 并稍微简化编程。

还有其他不同的方法,例如使用processEvents()但我个人推荐线程方法。

于 2010-06-18T20:56:52.270 回答