明仕強QT高級開發(fā) 學(xué)習筆記
在具體的代碼編寫中,只有繼承自QObject的類中,才可以通過宏Q_OBJECT進行修飾,從而轉(zhuǎn)變成要給元對象。
對于一個元對象,它有如下一些特點
1:可以支持QT特有的signals和slots機制,在不同對象之間進行通信。
2:可以支持QObject::metaObject方法,用于返回類關(guān)聯(lián)的元對象。
3:可以支持QMetaObject::className,用于在執(zhí)行期獲取對象的類名。
4:可以支持QObject::inherits方法,用于判斷一個對象是否繼承自QObject
5:可以支持QObject::setProperty和QObject::property方法,用于動態(tài)的設(shè)置和獲取屬性名稱。
6:可以支持通過QMetaObject::newInstance用于構(gòu)造一個新的實例。
在使用QT的MOC機制時,存在的一些限制
1:不能對模板類使用MOC機制(模板類無法繼承自QObject)。
2:多重繼承時QObject必須是第一個,且不支持QObject的虛繼承。
3:函數(shù)指針不能作為信號或槽的參數(shù)。但通過typedef簡化后的函數(shù)指針可以作為槽函數(shù)的參數(shù)。
4:信號和槽函數(shù)的參數(shù)必須是完全名稱限定。
5:內(nèi)嵌類不能有信號和槽。
6:信號和槽函數(shù)返回不能是引用。
標簽: