今天學習QT學習之路的自定義信號槽例程,把connect中的信號和槽參數用實例化的方法去調用,發現編譯報以下錯誤:
error: 'reader' is not a class or namespace
&reader, &reader::receiveNewspaper);
error: 'newspaper' is not a class or namespace
QObject::connect(&newspaper, &newspaper::newPaper, \
原來是沒有按照例程寫為
QObject::connect(&newspaper, &Newspaper::newPaper, &reader, &Reader::receiveNewspaper);
一般調用類中的方法都是先實例化,開始也不明白為什么,最后查找資料,原來QObject::connect 是一種 static 類型的方法,普通的的類的方法是
必須通過實例化的對象調用的,但是聲明為 static 類型的方法是屬於類的,不是屬於對象的,可以直接用類名進行調用。
然后在幫助文檔中發現connect沒有寫明是static方法,
最后去網上查資料發現,原來是moc系統中已經將函數處理,其實connect函數就是static方法。詳細說明見stack overflow中說明,以下是網址:
https://stackoverflow.com/questions/29218092/where-is-qt-s-pointertomemberfunction-defined
小的知識點:
1、自定義信號槽時,如果用到自己定義的類型,必須要先用qRegisterMetaType()函數注冊好,才能創立信號槽連接。