Qt--- 一些常見問題處理(無法解析得外部符號,UI頭文件找不到等)


1.編譯,出錯,提示:

mainwindowprivate.obj:-1: error: LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl MainWindowPrivate::metaObject(void)const " (?metaObject@MainWindowPrivate@@UEBAPEBUQMetaObject@@XZ)

 

從QObject繼承了一個類:

#ifndef MAINWINDOWPRIVATE_H
#define MAINWINDOWPRIVATE_H

#include "DockManager.h"

class MainWindowPrivate : public QObject
{
Q_OBJECT
public:
MainWindowPrivate();
virtual ~MainWindowPrivate();

public:
void initDockWidget(QWidget *widget);

private:
ads::CDockManager *DockManager;
};

#endif // MAINWINDOWPRIVATE_H

 


編譯,出錯,提示:

mainwindowprivate.obj:-1: error: LNK2001: 無法解析的外部符號 "public: virtual struct QMetaObject const * __cdecl MainWindowPrivate::metaObject(void)const " (?metaObject@MainWindowPrivate@@UEBAPEBUQMetaObject@@XZ)

 

解決辦法:

編譯出錯是因為沒有生成moc_mainwindowprivate.cpp文件造成的。

如果新添加QObject派生類到您的項目,則必須再次運行qmake,即
1、清理項目(非必須)
2、運行qmake(必須)
3、構建項目(必須)
否則,如果在QObject繼承的類上進行增量構建,那么您將擁有過時的moc文件,或者干脆沒有moc文件。


原文鏈接: https://blog.csdn.net/libaineu2004/article/details/108215844

 

 

2.在UI設計界面不能通過添加槽函數來添加槽函數(。-  。)

 

 類似於上面這個報錯。

解決辦法:

.對應 cpp 中include的頭文件可能為大寫 #include "ui_Dlg_CSP.h",導致添加槽時,找不到對應頭文件,要手動改為小寫。

Qt會根據 dlg_CSP.ui 自動生成一個ui_dlg_CSP.h,有時候改了UI后,沒有自動重新生成,還是使用的舊的 .h。此時需要手動將舊的 .h刪掉,然后構建。

 

3.在UI設計界面不能通過添加槽函數來添加槽函數(。-  。)

 

因為mainwindow.cpp和testui.cpp兩個cpp中都包含了ui_mainwindow.h導致的。

自動轉到槽函數一定程度是看哪里包含了上面這個ui頭文件的,有兩處引入就不懂該在哪里添加頭文件了,這時候去把想要加入槽函數以外地方的ui頭文件注釋掉,添加完槽函數再解開注釋就行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM