零聲Qt開發(fā)必備技術(shù)棧 (Qt5/C語(yǔ)言/c++/數(shù)據(jù)庫(kù)/OpenCV/Quick/Qt實(shí)戰(zhàn))
QT MOC機(jī)制
QT的元對(duì)象系統(tǒng)是一個(gè)基于標(biāo)準(zhǔn)C++的擴(kuò)展,能夠使c++更好的適應(yīng)GUI編程,支持開發(fā)人員在執(zhí)行期獲取對(duì)象的信息,同時(shí)這一機(jī)制也支持屬性以及文本翻譯(國(guó)際化,多語(yǔ)言)。
由于標(biāo)準(zhǔn)C++并沒有提供動(dòng)態(tài)元信息的支持,因此qt通過(guò)一個(gè)單獨(dú)的工具moc來(lái)處理這個(gè)問(wèn)題,moc工具會(huì)解析頭文件中被Q_OBJECT宏聲明的類,并生成一個(gè)單獨(dú)的標(biāo)準(zhǔn)cpp文件來(lái)實(shí)現(xiàn),因此對(duì)任何c++編譯器而言,QT的moc機(jī)制都可以正常工作。
在具體的代碼編寫中,只有繼承自QObject的類中,才可以通過(guò)宏Q_OBJECT進(jìn)行修飾,從而轉(zhuǎn)變成要給元對(duì)象。
對(duì)于一個(gè)元對(duì)象,它有如下一些特點(diǎn)
1:可以支持QT特有的signals和slots機(jī)制,在不同對(duì)象之間進(jìn)行通信。
2:可以支持QObject::metaObject方法,用于返回類關(guān)聯(lián)的元對(duì)象。
3:可以支持QMetaObject::className,用于在執(zhí)行期獲取對(duì)象的類名。
4:可以支持QObject::inherits方法,用于判斷一個(gè)對(duì)象是否繼承自QObject
5:可以支持QObject::setProperty和QObject::property方法,用于動(dòng)態(tài)的設(shè)置和獲取屬性名稱。
6:可以支持通過(guò)QMetaObject::newInstance用于構(gòu)造一個(gè)新的實(shí)例。