2010-06-18 69 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問題可能也有用。

相關問題