qt的元物件系統是用來處理物件間通訊的訊號和槽,它執行資訊型別和動態屬性。qt的元物件系統包括以下3個部分的內容:
(1)qobject類;
(2)類宣告私有段中的q_object巨集;
(3)元物件編譯器
元物件編譯器讀取c++原始檔時,如果發現在檔案中類的宣告中含有q_object巨集,元物件編譯器就會給含有q_object巨集的類生成另乙個含有元物件**的c++原始檔,這個生成的原始檔必須與這個類的實現一起編譯和鏈結。
qobject中的元物件**除了提供物件間通訊的訊號和槽以外,還可實現其他特徵。
(1)classname( )函式在執行時以字串返回類的名稱,不需要c++編譯器中的本地執行型別資訊的支援。
(2)inherits( )函式返回的物件是乙個繼承於qobject繼承樹中乙個特定類的例項。
(3)tr( )和trutf8( )兩個函式是用於國際化中的字串翻譯。
(4)setproperty( )和property( )兩個函式是用來通過名稱動態設定而獲得物件屬性。
使用qobject作為基類而不使用q_object巨集和元物件**是可以的,但是如果q_object巨集沒有被使用,那麼這個類宣告的訊號和槽,以及其他特徵描述都不會被呼叫。一般建議在qobject的所有子類中使用q_object巨集,而不管它們是否使用了訊號與槽。
元物件編譯器moc
諸位周知,qt 使用的不是標準的c 語言,而是對其進行了一定程度的 擴充 為什麼這樣說呢?這一點我們從qt新增加的關鍵字就可以看出來 signal slots 或者 emit。所以有人會覺得qt 的程式編譯速度慢,這主要是因為在 qt 將源 交給標準 c 編譯器之前,需要事先將這些擴充套件 的語法去...
QT中元物件系統(MOC)原理
元物件系統這樣工作 q object 巨集宣告一些內省函式 metaobject tr qt matacall 和少量其他的函式 這些函式必須在所有的 qobject 的子類中被實現。qt 的moc 工具負責執行被 q object 巨集宣告的函式,同時負責執行所有的訊號函式。qobject 的成員...
編譯QT時出去「編譯器內部錯誤」提示
這幾天在編譯qt4.4.2 我用兩台機器,安裝了兩樣的開發環境,在本本上能順利編譯,在台式電腦上怎麼也編譯不過去,每次失敗後我都用make distclean來清理,再重新配製,錯誤依舊,總提示 編譯器內部錯誤 而且每次出錯的地方也不同,再加上同樣的檔案和環境可以在本本上編譯成功,這說明問題可能出在...