1. 程式人生 > >QT---之Q_OBJECT的概念

QT---之Q_OBJECT的概念

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

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