Qt 的幾個核心機制總結之 元物件系統

2021-06-27 23:40:16 字數 899 閱讀 9524

1.qt的元物件與標準c++中物件的區別

qt中的物件系統和標準c++中的物件系統是存在區別的,更確切得講前者是對後者的一種擴充套件。每個元物件具有乙個元資訊,包含有物件的類名以及相應的訊號和槽的列表,以及指向對應函式的指標。

qt中的元物件系統和標準c++系統的區別有哪些?

1.支援物件間使用訊號和槽的機制進行通訊

2.動態物件轉化

3.可查詢可設計的物件屬性

4.層次結構可查詢的物件樹

5.安全的指標管理

6.支援國際化的文字轉化

7.支援多工定時器

8.事件和事件過濾器

但是要注意這些都是靠標準的c++語言來實現的,也是基於標準c++物件實現的。

2.如何實現元物件?

元物件是基於如下3個方面的實現

object基類

q_object巨集

moc工具

實現的過程如下:

qmake 生成的makefile自動呼叫moc工具,moc工具讀取標頭檔案,檢視是否包含有q_object巨集定義,如果包含則根據這個檔案生成另乙個標頭檔案,該標頭檔案包含了元物件必須包含的一些函式的宣告,相應的類的源程式也會經過moc工具進行擴充套件形成最終的原始檔,傳遞給編譯器,編譯器再根據上一步處理的原始檔形成連線檔案,最後鏈結器再將鏈結檔案同其他鏈結檔案鏈結起來,形成可執行檔案。

在這個過程中q_object巨集的作用是宣告了每乙個q_object子類中必須實現的一些函式。

而moc工具生成了q_object宣告的所有函式和所有訊號的實現。

可以用下面的圖來概括

Qt 三大核心機制

訊號槽是qt物件間通訊的方法,主要通過connect 函式連線訊號函式和槽函式進行通訊 connect 是qobject類的乙個靜態函式 static qmetaobject connection connect const qobject sender,pointertomemberfunctio...

Linux有趣的核心機制 OOM

what 什麼是oom linux下面有個非常特別的機制叫oom killer out of memory killer 這個有趣的傢伙會在系統記憶體耗盡的情況下跳出來,選擇性的乾掉一些程序以求釋放一些記憶體。預設具體的記錄日誌是在 var log messages中,如果出現了out of mem...

MFC的六大核心機制概述

1 mfc程式的初始化工作 在mfc中所有的類都 於乙個基類 cobject。mfc程式初始化過程中,其實就是虛函式的呼叫的過程,分清呼叫執行的到底是哪乙個具體的虛函式,是父類的虛函式,還是基類的虛函式,都是至關重要的。2 rtti執行時型別識別 mfc程式執行過程中需要對類的型別進行動態的判斷。在...