QT_bug記錄_QT+VS中“ui_XXX.h”和 moc_XXX.cpp無法正常生成問題
-
- 一、ui_XXX.h檔案生成問題
-
- 解決方法1
- 解決方法2
- 二、moc_XXX.cpp無法生成問題;
-
- 解決方法一
- 解決方法二
小碼哥在做算法開發的時候用的是VS+QT,需要做一些簡單的demo時,比較喜歡采用QDesigner進行界面設定。因為其操作簡單快捷,我們通過建立 QT GUI Application,并選擇你想要的基類, 就可以建立一個簡單的GUI界面應用程式,直接F5就可以顯示你剛剛建立的界面;
而有些時候我們按F5運作後,卻出現無法打開包括檔案: “ui_XXX.h” 的提示,也就是說包含目錄中沒有這檔案存在。ui_XXX.h檔案是xxx.ui檔案自動生成的,要解決這個問題就要從xxx.ui檔案下手,具體步驟如下:
一、ui_XXX.h檔案生成問題
解決方法1
此問題需要對***.ui檔案進行編譯才能生成;滑鼠右鍵點選*.ui檔案選擇編譯即可解決這個問題**
解決方法2
有些時候,“編譯”按鈕是灰色不可選的,此時需要按照以下步驟,更改***.ui檔案的部分設定,再進行編譯就能解決問題,步驟如下:
-
1、滑鼠右鍵點選XXX.ui檔案,選擇屬性:
無法編譯的ui檔案往往在“項類型“”中設定是不參與生成的,如下:
QT_bug記錄_QT+VS中fatal error C1083: 無法打開包括檔案: “ui_XXX.h”和 XXX.obj : error LNK2001: 無法解析的外部符号"public: - 2、将”不參與生成”項更改為“ 自定義生成工具”,并點選“确定”儲存設定;
QT_bug記錄_QT+VS中fatal error C1083: 無法打開包括檔案: “ui_XXX.h”和 XXX.obj : error LNK2001: 無法解析的外部符号"public: -
3、 再重新打開XXX.ui的屬性,對自定義生成工具的設定項
對其進行如下設定即可,可以看出生成的ui_***.h檔案在工作目錄下的\GeneratedFiles檔案夾内:
參數具體設定如下:QT_bug記錄_QT+VS中fatal error C1083: 無法打開包括檔案: “ui_XXX.h”和 XXX.obj : error LNK2001: 無法解析的外部符号"public:
指令行:"$(QTDIR)\bin\uic.exe" -o “.\GeneratedFiles\ui_%(Filename).h” “%(FullPath)”
說明:Uic%27ing %(Identity)…
輸出:.\GeneratedFiles\ui_%(Filename).h;%(Outputs)
附加依賴項:$(QTDIR)\bin\uic.exe;%(AdditionalInputs)
連結對象:是
将輸出視為内容:否
完成以上設定之後,即可對XXX.ui進行編譯,生成ui_XXX.h了。
二、moc_XXX.cpp無法生成問題;
vs+Qt中除了ui_XXX.h檔案有時無法正常生成之外,moc_XXX.cpp檔案也會出現無法生成的問題。一般報錯如下:
2>XXX.obj : error LNK2001: 無法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl XXX::metaObject(void)const " ([email protected]@@UEBAPEBUQMetaObject@@XZ)
2>XXX.obj : error LNK2001: 無法解析的外部符号 “public: virtual void * __cdecl XXX::qt_metacast(char const *)” ([email protected]@@[email protected])
2>XXX.obj : error LNK2001: 無法解析的外部符号 “public: virtual int __cdecl XXX::qt_metacall(enum QMetaObject::Call,int,void * *)” ([email protected]@@[email protected]@@[email protected])
moc_XXX.cpp檔案無法生成往往與XXX.h的設定有關;
解決方法一
該方法與ui_XXX_.h檔案解決方法類型,如下:
- 1、找到moc_XXX.cpp對應的XXX.h檔案,然後右鍵單擊,選擇屬性:
- 2、将“項類型“”中設定是不參與生成的更改為“ 自定義生成工具”;
- 3、對“ 自定義生成工具”進行如下設定;
指令行: “$(QTDIR)\bin\moc.exe” “%(FullPath)” -o “.\GeneratedFiles$(ConfigurationName)\moc_%(Filename).cpp” -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DSCISLDEPTHMEADLG_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_WINDLL “-I.\GeneratedFiles” “-I.” “-I$(QTDIR)\include” “-I.\GeneratedFiles$(ConfigurationName).” “-IKaTeX parse error: Expected 'EOF', got '\include' at position 8: (QTDIR)\̲i̲n̲c̲l̲u̲d̲e̲\QtCore" "-I(QTDIR)\include\QtGui” “-I$(QTDIR)\include\QtWidgets”
說明: Moc%27ing (Filename).h…
輸出: .\GeneratedFiles$(ConfigurationName)\moc_%(Filename).cpp
附加依賴性: KaTeX parse error: Expected 'EOF', got '\bin' at position 8: (QTDIR)\̲b̲i̲n̲\moc.exe;%(Full…(QTDIR)\bin\moc.exe;%(FullPath)
以上設定也可參照正确生成moc檔案的.h檔案進行設定;
完成以上設定會後,在對xxx.h檔案重新編譯,可解決問題;
解決方法二
此法用起來更加簡單友善一些,小碼哥比較推薦使用;
- 1、右鍵單擊報錯工程,點選convert project to Qt Add-in project;
- 2、在轉換項目之後移除xxx.h檔案,注意是移除,不是删除;
- 3、重添加xxx.h檔案,重新添加之後應該就會出現moc_XXX.cpp檔案了;