2014-04-15 30 views
0

我知道以前曾經問過類似的問題,但我無法找到針對我的特定問題的答案。我有一個主(GUI)線程,按下按鈕初始化一個工作線程來執行一些分析。我使用信號和插槽在我的工作線程和我的GUI線程之間進行通信(即當線程啓動並完成時),但是我需要深入其中。我的工作線程實際上是在一個單獨的實現文件中調用另一個類,然後迭代通過一系列計算,每次迭代發送到std :: cout(因爲代碼曾經是一個控制檯應用程序,我現在正在編寫一個GUI) 。我試圖將每次迭代的輸出反饋回我的GUI線程,以便在我的代碼迭代時實時更新文本瀏覽器。問題是,當我從工作線程調用的類發出一個信號時,它不會被GUI線程拾取。我沒有得到任何錯誤。有沒有人有關於如何從我的工作線程調用的類向GUI傳輸信號的建議?我可以根據需要發佈代碼,但我不確定最有用的代碼是什麼,而且代碼非常廣泛(這是一個飛機性能應用程序)。任何幫助將不勝感激。非常感謝你!從子線程提供更新到Qt GUI

+0

從你說的話,這似乎是不可能的,所以調試這個,也許你可以檢查每個對象的線程關聯,也許某個對象不在你期望的線程中。然後檢查連接,以及跨線程連接是否正確。 – Bgie

回答

0

1)確保connect()呼叫連接你的信號返回true。如果沒有,qdebug輸出通常會告訴你什麼是錯的

2)你應該使用QueuedConnection類型(默認設置(自動),應該也可以)

+0

我不完全確定如何檢查我的connect()是否返回true。我試過: 'bool ok = connect(deck,SIGNAL(prop()),this,SLOT(converter())); Q_ASSERT(ok);' 但沒有輸出 – GTSeth

+0

應該這樣做。如果Q_ASSERT失敗,則會發出qFatal()消息。輸出也會有失敗的原因。一定要檢查調試輸出。 – tpatja

+0

也一定要在調試模式下編譯並運行 –