2013-06-13 44 views
6

我試着這樣做:的QObject ::連接:不能排隊類型的參數「詮釋與」

connect(this, SIGNAL(signalClicked(int&)), classA, SLOT(doWork(int&))); 

但我得到的稱號消息。 所以我已經探討了互聯網,我想出了這個解決方案,它不藏漢工作:

qRegisterMetaType<int&>("Type"); 
connect(this, SIGNAL(signalClicked(Type)), classA, SLOT(doWork(Type))); 

(錯誤:調用沒有匹配的函數「qRegisterMetaType(爲const char [5])」)

任何解決方案? 感謝您的幫助。

+0

你是否#include '? – Angew

+0

是的,我這樣做,這就是爲什麼我不明白... – Thibel

+0

感謝您的回答,但我已經在這裏找到了這個解決方案http://www.qtforum.org/article/36440/signal-between-threads.html ?s = e3808660493121294f8780ef018f9b5e98f5b6f4,不幸的是它仍然無法正常工作。 – Thibel

回答

11

如果Qt試圖排隊的參數,這意味着連接之間的線程。這對於非const引用不起作用。

您可以使用reference_wrapper來解決這個問題,但我強烈建議您重新考慮您的設計。在信號/插槽連接中通過引用傳遞值不是一個好主意。

+0

我知道這不是做這件事的好方法,但我是新手,這是我找到的唯一解決方案。其實我想要實現的是更新主線程中的屬性,並從無限循環中的另一個線程中讀取它。我會嘗試你的建議,雖然 – Thibel

+1

@ Dan-Milburn,因爲Qt複製對象,爲什麼通過引用傳遞值不是一個好主意? – TheDarkKnight

+0

如果Qt需要一個副本,通過(非const)引用的意義是什麼?無論如何,接收槽將無法修改原稿(儘管誤導了它可能)。此外,Qt信號/插槽背後的要點是,信號發射器不知道與其連接的是什麼,或者有多少個連接。如果有兩個連接的插槽,並且它們都嘗試修改通過引用傳遞的對象,那麼您有各種潛在的錯誤。在有限的情況下,它可以與非排隊連接一起工作,但它仍然是糟糕的設計。 –

相關問題