2013-02-08 21 views
3

我有一個問題來創建一個結構自定義插槽/信號。我有以下代碼:對象::連接:沒有這樣的信號

qRegisterMetaType<namespace::myClassA::aStruct>(); 
QObject::connect(&myClassA, SIGNAL(theSignal(myClassA::aStruct)), 
        &myClassB, SLOT(theSlot(myClassA::aStruct))); 

當運行我的程序:

Object::connect: No such signal NameSpace::myClassA::theSignal(myClassA::aStruct) 
Object::connect: (receiver name: 'NameSpace__CLASSNAME') 

我該如何解決這個問題?

PS:插槽和信號已經在頭文件被正確申報文件Q_SIGNALS和Q_SLOTS關鍵字,用正確的參數(aStruct)

+1

您是否在執行信號和插槽後運行'qmake'? – PrisonMonkeys 2013-02-08 13:22:42

+0

Q_DECLARE_METATYPE/qRegisterMetatype不需要,它也不會幫助直接連接(當兩個對象都在同一個線程中時默認) – 2013-02-08 14:32:52

+0

對我來說,即使看起來像小小的針腳,也會妨礙正常運行:SIGNAL(PageClosed (QWidget *頁面))產生了一個錯誤。我刪除了參數:頁面,並被接受。 – peter70 2018-03-02 09:32:30

回答

8

信號/插槽連接時,必須充分「作用域」使用的類型,因爲方法調用被轉換成文本,所以你的連接呼叫應該是這樣的:

QObject::connect(&myClassA, SIGNAL(theSignal(namespace::myClassA::aStruct)), 
       &myClassB, SLOT(theSlot(namespace::myClassA::aStruct))); 

你可能需要更新的信號/槽聲明的參數相匹配。

+0

你剛從釋放信號/插槽連接故障的糟糕地獄中釋放了我。謝謝你,先生(或女士) – 2013-07-16 00:44:22

1

我找到了信號槽的解決方案: 信號和槽功能的聲明和調用是不匹配的!一旦我修好它們,該槽就被召喚了。

在這裏,你可能會得到所有可能的錯誤。

20 ways to debug Qt signals and slots

希望,它幫助了很多閱讀本articlethis後,將節省您的時間。

0

在聲明時隙/信號,則可以立足參數結構的命名空間像這樣:

::命名空間:: ClassA的:: structA

而不是使用ClassA的:: structA從內側「命名空間」。如果您嘗試引用同一名稱空間內的結構,這非常有用。

相關問題