在一個QT項目中新建一個帶QObject定義的類后 (不是繼承),可能會出現LNK2001 的錯誤,這是由於IDE沒有自動為新建的類生成 moc_XXXX.cpp 文件導致的。
一種做法是手動生成moc_XXXX.cpp文件,然后復制到指定位置,如https://www.cnblogs.com/lovebay/p/9337528.html,但一旦文件有改動,就需要重新手動操作一遍。
另一種做法是通過配置,自動生成moc_XXXX.cpp文件,可參考https://jingyan.baidu.com/article/3065b3b68518adbecef8a477.html。步驟是
- 修改類的.h文件的配置屬性,在“項類型”或“ItemType”中選擇“自定義生成工具”或“Custom Build Tool”,點擊應用,左邊的屬性里會出現一個新的選項,如圖所示:
-
參考其它正確的.h文件配置該項即可
若這一過程完全配置正確,編譯鏈接還是有問題的話,再參考https://blog.csdn.net/humanking7/article/details/80871729,因為剛才只是配置了.h文件,而項目還沒有正確編譯對應的cpp文件。步驟:
- 編輯項目的.vcxproj文件,參考其它的QT文件,我碰到的是缺少下面這個XML片段,注意:Debug和Release應各有一個該片段,只是其中下面高亮的路徑不一樣
<ClCompile Include="GeneratedFiles\Debug\moc_XXXXX.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>