Q_OBJECT提供了信號槽機制、國際化機、RTTI 的反射能力(cpp中使用Q_OBJECT致使沒法處理moc,就須要#include 「moc_xxx.h」)

 只有繼承了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就出錯,很大一部分是由於沒有注意到這個宏應該放在頭文件中。 
相關文章
相關標籤/搜索