Qt---一些常见问题处理(无法解析得外部符号,UI头文件找不到等)

  • 格式:pdf
  • 大小:71.47 KB
  • 文档页数:2

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⽂件。

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头⽂件注释掉,添加完槽函数再解开注释就⾏。