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頭文件注釋掉,添加完槽函數再解開注釋就行。