元對(duì)象編譯器(moc)
作者:穆煜,華清遠(yuǎn)見嵌入式學(xué)院講師。
Qt的元對(duì)象系統(tǒng)是用來(lái)處理對(duì)象間通信的信號(hào)和槽,它運(yùn)行信息類型和動(dòng)態(tài)屬性。Qt的元對(duì)象系統(tǒng)包括以下3個(gè)部分的內(nèi)容:
(1)QObject類;
(2)類聲明私有段中的Q_OBJECT宏;
(3)元對(duì)象編譯器
元對(duì)象編譯器讀取C++源文件時(shí),如果發(fā)現(xiàn)在文件中類的聲明中含有Q_OBJECT宏,元對(duì)象編譯器就會(huì)給含有Q_OBJECT宏的類生成另一個(gè)含有元對(duì)象代碼的C++源文件,這個(gè)生成的源文件必須與這個(gè)類的實(shí)現(xiàn)一起編譯和鏈接。
QObject中的元對(duì)象代碼除了提供對(duì)象間通信的信號(hào)和槽以外,還可實(shí)現(xiàn)其他特征。
(1)className( )函數(shù)在運(yùn)行時(shí)以字符串返回類的名稱,不需要C++編譯器中的本地運(yùn)行類型信息的支持。
(2)inherits( )函數(shù)返回的對(duì)象是一個(gè)繼承于QObject繼承樹中一個(gè)特定類的實(shí)例。
(3)tr( )和trUtf8( )兩個(gè)函數(shù)是用于國(guó)際化中的字符串翻譯。
(4)setProperty( )和property( )兩個(gè)函數(shù)是用來(lái)通過(guò)名稱動(dòng)態(tài)設(shè)置而獲得對(duì)象屬性。
使用QObject作為基類而不使用Q_OBJECT宏和元對(duì)象代碼是可以的,但是如果Q_OBJECT宏沒有被使用,那么這個(gè)類聲明的信號(hào)和槽,以及其他特征描述都不會(huì)被調(diào)用。一般建議在QObject的所有子類中使用Q_OBJECT宏,而不管它們是否使用了信號(hào)與槽。
“本文由華清遠(yuǎn)見http://www.embedu.org/index.htm提供”
來(lái)源:華清遠(yuǎn)見0次