2012-08-26 63 views
3

我使用boost線程從相機收集圖像,每當新圖像到達時我都會調用Qt信號。現在,當這個信號發出時,連接的插槽運行,我正在更新小部件控制來到我的插槽,但它不更新小部件,而它在控制檯打印調試。我的問題是這個插槽是在主線程還是在線程發出信號以及如何實現所需的更新? 謝謝帶升壓線程的Qt更新GUI

+1

我從來沒有使用boost,但Qt有一個非常乾淨和簡單的線程接口:[QThread](http://doc.qt.nokia.com/4.7-snapshot/qthread.html) –

回答

1

插槽將運行在創建Qt小部件的任何線程中。 Qt將在交叉線程信號和插槽上使用QueuedConnection。

編輯:這可能是有用的 signal qt from a non-qt thread, QueuedConnection

是否阻止了主線程?

+0

沒有主線程是常規運行。主要的問題是,因爲主(GUI)線程負責繪製和更新的東西,我的SLOT在主線程中定義,爲什麼我不能更新它。我可以完成其他任務,除了與來自SLOT的GUI相關,這意味着SLOt由發射信號的線程運行。 (糾正我,如果我錯了)你可以建議這個問題? –

+0

你是否嘗試強制連接使用Qt :: QueuedConnection而不是讓它決定。我在這方面看到的一些討論說這是必需的。我還沒有嘗試從自己的boost線程發出信號,所以我不確定是否需要。我知道這從QThread是不需要的,因爲我在之前的應用程序中做過這些。 – drescherjm

+0

是的,我也試過,但沒有改變任何東西,可能是我將我的應用程序從提升轉移到QThread。 –