STEP1編譯UI文件,生成[UI頭文件]
命令行:
"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(InputPath)"輸出
".\GeneratedFiles\ui_$(InputName).h"為了方便說明,將這里的“ui_$(InputName).h”簡稱為[UI頭文件]。
輸出的[UI頭文件]定義了MOC的自定義生成步驟
命令行:
"$(QTDIR)\bin\moc.exe" "$(InputPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp" -DQT_CORE_LIB -DQT_GUI_LIB -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DUNICODE -DWIN32 -I"$(QTDIR)\include\." -I"$(QTDIR)\include\QtCore\." -I"$(QTDIR)\include\QtGui\." -I".\." -I".\GeneratedFiles\$(ConfigurationName)\." -I".\GeneratedFiles\."
輸出:
".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp"為了方便說明,將這里的“moc_$(InputName).h”簡稱為[MOC代碼文件]。
STEP2編譯[UI實現(xiàn)文件],輸出[MOC代碼文件]。
[UI實現(xiàn)文件]一方面繼承自QT的UI相關(guān)類,例如QWidget、QMainWindow,另一方面包含了[UI頭文件],而這個頭文件由于自定義了生成步驟,則會同時輸出[MOC代碼文件]。這個[MOC代碼文件]和[UI實現(xiàn)文件],分別實現(xiàn)了UI類的2部分:QT的MOC機(jī)制和基本的C++類實現(xiàn)。這很巧妙,分2部分來定義一個標(biāo)準(zhǔn)的C++類,其中一部分是編譯了另外一部分后生成的。
這個[MOC代碼文件]很簡單,就是Q_OBJECT宏定義的實現(xiàn)代碼部分。這部分在官方幫助文檔“Meta-Object System”中有詳細(xì)說明。而MOC文件的工作方式在官方幫助文檔“Using the Meta-Object Compiler (moc)”中有詳細(xì)說明。
STEP3編譯[MOC代碼文件],到此已編譯完了UI類需要的所有定義代碼。