QT中的巨集 Q OBJECT

2021-10-09 07:26:19 字數 860 閱讀 6014

只有繼承了qobject類的類,才具有訊號槽的能力。所以,為了使用訊號槽,必須繼承qobject。凡是qobject類(不管是直接子類還是間接子類),都應該在第一行**寫上q_object。不管是不是使用訊號槽,都應該新增這個巨集。這個巨集的展開將為我們的類提供訊號槽機制、國際化機制以及 qt 提供的不基於 c++ rtti 的反射能力。因此,如果你覺得你的類不需要使用訊號槽,就不新增這個巨集,就是錯誤的。其它很多操作都會依賴於這個巨集。

注意,由於 moc 只處理標頭檔案中的標記了q_object的類宣告,不會處理 cpp 檔案中的類似宣告。因此,如果我們的類位於 main.cpp 中,是無法得到 moc 的處理的。解決方法是,我們手動呼叫 moc 工具處理 main.cpp,並且將 main.cpp 中的#include 「***.h」改為#include 「moc_***.h」就可以了。不過,這是相當繁瑣的步驟,為了避免這樣修改,我們還是將其放在標頭檔案中。許多初學者會遇到莫名其妙的錯誤,一加上q_object就出錯,很大一部分是因為沒有注意到這個巨集應該放在標頭檔案中。

class

csortdialog

:public qdialog,

public ui::sortdialog //可以

//class csortdialog : public ui::sortdialog,public qdialog //不可以 會報錯沒有***等成員

class

csortdialog

:public qdialog,

public ui::sortdialog

;

Qt之Q OBJECT巨集的作用

只有加入了q object,你才能使用qt中的signal和slot機制。凡是qobject類 不管是直接子類還是間接子類 都應該在第一行 寫上q object。不管是不是使用訊號槽,都應該新增這個巨集。這時候,就必須在標頭檔案派生類的時候,首先像下面那樣引入q object巨集 class mym...

Qt 原始檔中的 Q OBJECT

q object 為qobject 物件提供了訊號與槽的基礎,如果我們需要使用訊號與槽,最簡單方便的方式就是繼承qobject,並在類開頭放置q object 這個巨集,在預編譯前moc 會自動掃瞄所有標頭檔案,根據 signals 和 slot 關鍵字,提取訊號與槽的所有及對應的資訊索引,並為訊號...

Qt中的QStringLiteral巨集

1.說明 使用 qstringliteral 巨集可以在編譯期把 裡的常量字串 str 直接構造為 qstring 物件,於是執行時就不再需要額外的構造開銷了。如果編譯器支援,則 qstringliteral 巨集在編譯時從 str 生成乙個 qstring 的資料。在這種情況下從 qstringl...