Qt 將源代碼交給標準 C++ 編譯器,如 gcc 以前,須要事先將這些擴展的語法去除掉。完成這一操做的就是 moc。命令行
moc 全稱是 Meta-Object Compiler,也就是「元對象編譯器」。Qt 程序在交由標準編譯器編譯以前,先要使用 moc 分析 C++ 源文件。若是它發如今一個頭文件中包含了宏 Q_OBJECT,則會生成另一個 C++ 源文件。這個源文件中包含了 Q_OBJECT 宏的實現代碼。這個新的文件名字將會是原文件名前面加上 moc_ 構成。這個新的文件一樣將進入編譯系統,最終被連接到二進制代碼中去。所以咱們能夠知道,這個新的文件不是「替換」掉舊的文件,而是與原文件一塊兒參與編譯。另外,咱們還能夠看出一點,moc 的執行是在預處理器以前。由於預處理器執行以後,Q_OBJECT 宏就不存在了。對象
在命令行下輸入moc yourfilename.h -o moc_youfilename.cpp生成不帶Q_OBJENT的源文件。編譯器