2010-06-18 70 views
0

我开始与QT4,我想知道在哪里把我的应用程序代码。
在这里?将应用程序代码放在QT应用程序上的位置?

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

或者在这里? (究竟在哪里?)

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

如果我想我的应用程序不仅对用户事件作出反应,而且要定期执行循环,我该如何放置循环?

+0

你需要在应用程序代码中做什么?你为什么需要循环? – 2010-06-18 19:42:54

+0

我试图为模拟器构建一个可视化调试器。我的模拟器有一个获取指令并执行它的方法,它需要在循环中调用。 – Petruza 2010-06-18 20:36:44

回答

2

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

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

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

2

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

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

此外,QAbstractEventDispatcher可能对您有用。

This问题可能也有用。

相关问题