2010-05-27 71 views
1

Greetings, 我是QT(4.6)的新手,對於它的事件機制有一些基本的問題。我來自Swing背景,所以我試圖將它與QT進行比較。基本的QT事件處理/線程問題?

1)事件處理循環是否在單獨的線程中運行? (如Swing中的EventDispatch線程)?

2)如果我們打開幾個'QMainWindow',他們在幾個線程中運行嗎?

3)什麼是在單獨的線程中運行密集進程的最佳方式? (如SwingWorker in Swing?)

4)如果inteinter-process在一個單獨的線程中運行,是否有可能從該進程調用像update(),repaint()這樣的UI方法?

在此先感謝。

回答

3

1事件循環在同一個線程

2所有的UI元素都生活在同一個線程中,你的main()函數執行一個運行。

3有QThread類,它允許你有一個線程與單獨的事件循環。有QRunable抽象類能夠使用QThreadPool在單獨的線程中運行重複長時間運行的任務。 ()和repaint()是插槽,從獨立線程調用它們的最佳方式是使用排隊連接,並在對象中使用排隊連接,它位於單獨的線程中(讀取QObject :: connect文檔關於連接類型)

您可以通過閱讀我提到的課程文檔來找到所有必要的信息。

+0

感謝您的回答,正在使用QtConcurrent :: run()比擴展QThread,QRunnable更好嗎? – 2010-05-27 09:54:15

+1

是的,在大多數情況下應該會更好,但我還沒有自己嘗試過。 – VestniK 2010-05-27 10:35:18