您好,登錄后才能下訂單哦!
QT元對(duì)象系統(tǒng)
qt的主要成就之一就是使用了一種機(jī)制對(duì)C++進(jìn)行了擴(kuò)展,并且使用這種機(jī)制創(chuàng)建了獨(dú)立的軟件組件,這些組件可以綁定在一起,但任何一個(gè)組件對(duì)于它所要連接的組件的情況一無所知,這種機(jī)制就稱為元對(duì)象系統(tǒng),它提供了關(guān)鍵的兩個(gè)技術(shù),信號(hào)和槽,以及內(nèi)省。
內(nèi)省功能對(duì)于實(shí)現(xiàn)信號(hào)和槽是必須的,并且容許開發(fā)人員在運(yùn)行時(shí)獲取有關(guān)QObject子類的“元信息”,包括一個(gè)含有對(duì)象的類名以及它所支持的信號(hào)和槽的列表,這一機(jī)制也支持屬性和文本翻譯,并且為Qtscript模塊奠定了基礎(chǔ),標(biāo)準(zhǔn)的C++沒有對(duì)qt的的元對(duì)象系統(tǒng)鎖需要的動(dòng)態(tài)元信息提供支持,qt是通過一個(gè)獨(dú)立的moc工具解決這個(gè)問題,moc解析Q_OBJECT類的定義并且通過c++函數(shù)來提供可供使用的信息,猶豫moc使用純c++來實(shí)現(xiàn)所有功能,所以qt的元對(duì)象系統(tǒng)可以在任意c++編譯器上工作。
這一機(jī)制是這樣工作的:
Q_OBJECT宏聲明了每一個(gè)QObject子類中必須實(shí)現(xiàn)的一些內(nèi)省函數(shù):metaobject,tr(),qt_metacall(),以及一些其它函數(shù)。Qt的moc工具生成了用于由Q_OBJECT聲明的所有函數(shù)和所有信號(hào)的實(shí)現(xiàn)。像connect()和disconnnect()這樣的QOBJECT成員函數(shù)使用這些內(nèi)省函數(shù)來完成他們的工作。這些工作都是由qmake,moc和QObject自動(dòng)處理的,所以很少需要再去考慮這些事情,如果好奇可以參考QMetaObject類的文檔和由moc生成的c++源代碼文件。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。