一个QT的DLL项目,其中有一个界面已经导出,但是在其他工程中引用的时候,出现了错误。
界面导出类:
#pragma once
#include <QWidget>
#include "ui_QtGuiLogin.h"
#include "qtadd_global.h"
class QTADD_EXPORT QtGuiLogin : public QWidget
{
Q_OBJECT
public:
QtGuiLogin(QWidget *parent = Q_NULLPTR);
~QtGuiLogin();
private:
Ui::QtGuiLogin ui;
};
#include "QtGuiLogin.h"
QtGuiLogin::QtGuiLogin(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
QtGuiLogin::~QtGuiLogin()
{
}
在另外一个项目中要使用这个导出的界面,首先设置好链接库:
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtGuiTest.h"
class QtGuiLogin;
class QtGuiTest : public QMainWindow {
Q_OBJECT
public:
QtGuiTest(QWidget *parent = Q_NULLPTR);
private:
Ui::QtGuiTestClass ui;
QtGuiLogin* _guiTest = nullptr;
};
#include "QtGuiTest.h"
#include "../QtAdd/QtGuiLogin.h"
QtGuiTest::QtGuiTest(QWidget *parent)
: QMainWindow(parent) {
ui.setupUi(this);
_guiTest = new QtGuiLogin;
_guiTest->show();
}
编译出现了错误:
fatal error C1083: 无法打开包括文件: “ui_QtGuiLogin.h”: No such file or directory (编译源文件 QtGuiTest.cpp)
原因:是因为导出的DLL的头文件中包含了对象Ui::QtGuiTest ui,而且这个对象的定义没有找到。
解决:把导出的类修改一下就可以了,头文件中值包含声明:
#pragma once
#include <QWidget>
#include "qtadd_global.h"
namespace Ui {
class QtGuiLogin;
}
class QTADD_EXPORT QtGuiLogin : public QWidget
{
Q_OBJECT
public:
QtGuiLogin(QWidget *parent = Q_NULLPTR);
~QtGuiLogin();
private:
Ui::QtGuiLogin* ui;
};
#include "QtGuiLogin.h"
#include "ui_QtGuiLogin.h"
QtGuiLogin::QtGuiLogin(QWidget *parent)
: QWidget(parent)
{
ui = new Ui::QtGuiLogin;
ui->setupUi(this);
}
QtGuiLogin::~QtGuiLogin()
{
}
再次编译就通过了!
aaa