qt中moc的作用

2021-09-08 16:43:41 字數 919 閱讀 6230

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的原始檔。

總結起來就是:

1.moc 就是「元物件編譯器」;

2.qt程式在交給標準編譯器預編譯之前要使用 moc 分析 c++ 原始檔;

3.如果有巨集 q_object,則生成乙個包含q_object 巨集的實現**的c++原始檔;

4.新生成的原始檔參與到標準編譯器的編譯中;

5.編譯過程中如果找不到對應的moc檔案就會出現鏈結錯誤,此時要新增上對應的moc檔案;

遇到的問題:

1.  error prj0019: a tool returned an error code from "moc'ing treenodepreferencepage.h..." imediago

1)主要是.**件的屬性配置有問題,詳細解決方案參見下面鏈結;

有時候簡單的修改這個屬性還不能起到想要的效果,具體原因以及應對方法等到下周一分解

2)有可能是定義的類沒有繼承qobject這樣的qt類導致的;

qt中moc的作用

qt 將源 交給標準 c 編譯器,如 gcc 之前,需要事先將這些擴充套件的語法去除掉。完成這一操作的就是 moc。moc 全稱是 meta object compiler,也就是 元物件編譯器 qt 程式在交由標準編譯器編譯之前,先要使用 moc 分析 c 原始檔。如果它發現在乙個標頭檔案中包含了...

qt中moc的作用

2012 06 08 14 29 qt 將源 交給標準 c 編譯器,如 gcc 之前,需要事先將這些擴充套件的語法去除掉。完成這一操作的就是 moc。moc 全稱是 meta object compiler,也就是 元物件編譯器 qt 程式在交由標準編譯器編譯之前,先要使用 moc 分析 c 原始檔...

qt中moc的作用

moc 就是 元物件編譯器 qt程式在交給標準編譯器預編譯之前要使用 moc 分析 c 原始檔 如果有巨集 q object,則生成乙個包含q object 巨集的實現 的c 原始檔 新生成的原始檔參與到標準編譯器的編譯中 編譯過程中如果找不到對應的moc檔案就會出現鏈結錯誤,此時要新增上對應的mo...