我在Visual Studio中的先前项目中创建了一个QT表单(我们称之为项目1),现在另一个项目的UI属性和设计几乎与之前的项目相同,因此我想创建一个QT表单在Visual Studio中进行项目(项目2),并从先前的QT表单继承而不是重写代码。例如,对于项目1:
class GUIBase : public QMainWindow
{
Q_OBJECT
public:
GUIBase (QWidget *parent = 0, Qt::WFlags flags = 0);
~GUIBase ();
public slots:
//some slot definitions
};
在项目2中,派生形式:
class GUIDerived: public GUIBase
{
Q_OBJECT
public:
GUIDerived (QWidget *parent = 0, Qt::WFlags flags = 0);
~GUIDerived ();
};
编译项目2时,在项目1中复制GUIBase时会出现问题(因为GUIBase的头文件位于不同的文件夹中)。所以我的主要问题是,如何设置moc进程?我只是在使用GUIBase还是需要同时使用GUIBase和GUIDerived?我还需要GUIDerived的.ui文件吗?
对不起,如果问题不太清楚,那是因为我自己并不完全确定这个过程。
答案 0 :(得分:0)
创建一个库项目(.dll)并将UI放入其中(.ui文件和UI的源代码)。在您需要的所有项目中使用该库。
图书馆(标题):
#ifndef GUI_BASE_H
#define GUI_BASE_H
#ifdef UILIB
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
class DLL GUIBase : public QMainWindow
{
Q_OBJECT
public:
GUIBase (QWidget *parent = 0, Qt::WFlags flags = 0);
~GUIBase ();
public slots:
//some slot definitions
};
#endif //GUI_BASE_H
lib项目中的预处理器定义:
UILIB
lib头文件和生成的.lib文件必须在所有项目中都可用。将.lib文件添加到Visual Studio中项目属性的链接器/输入部分中的“附加依赖项”(并确保VS知道lib的路径,您可以在链接器中添加lib路径/ general /“附加图书馆目录“部分”