Qt 无法通过继承 class 访问 *ui 指针
Qt Cannot access *ui pointer from inheriting class
我正在尝试编写一个应用程序,其中我将有一个通用对话框 window 和特定对话框 windows,它们将从通用对话框继承一些基本功能。我不确定这是最好的方法,但我就是这样做的(CGenericProject class 是从 Qt Creator 中的对话框模板创建的):
CGenericProject.h:
#include <QDialog>
namespace Ui {
class CGenericProject;
}
class CGenericProject : public QDialog
{
Q_OBJECT
public:
explicit CGenericProject(QWidget *parent = 0);
~CGenericProject();
protected:
Ui::CGenericProject *ui;
};
CGenericProject.cpp:
#include "cgenericproject.h"
#include "ui_cgenericproject.h"
CGenericProject::CGenericProject(QWidget *parent) :
QDialog(parent),
ui(new Ui::CGenericProject)
{
ui->setupUi(this);
}
CGenericProject::~CGenericProject()
{
delete ui;
}
CEisProject.h:
#include "cgenericproject.h"
class CEisProject : public CGenericProject
{
public:
CEisProject();
~CEisProject();
};
CEisProject.cpp:
#include "ceisproject.h"
CEisProject::CEisProject()
{
ui-> NO ACCESS
}
CEisProject::~CEisProject()
{
}
如您在 CEisProject.cpp
文件中所见,我无法访问从 CGenericProject
继承的 ui
字段,即使它是 protected
。我的意思是,我看到 ui
本身,但我没有看到它的方法和成员。我将在那里定义的任何其他变量都可以访问。怎么了?我将不胜感激以这种方式提供的所有帮助。
您必须添加行
#include "ui_cgenericproject.h"
到 CEisProject.cpp
文件。
CGenericProject.h
文件包含在 CEisProject.h
中,但 CEisProject.h
无法访问 CGenericProject.cpp
。在你的基础 class 的 header 中,你只有一个 Ui::CGenericProject
的前向声明,并且你将其文件包含在 .cpp 中。所以CGenericProject.cpp
知道这个class的实现。
但是 CEisProject.cpp
无法访问该文件,因此您必须在此处再次包含该文件。
注意
您的前向声明令人困惑,您应该正确缩进。此外,在您的代码中添加一些注释以明确谁在阅读它,您使用的是两个不同的 classes 具有相同的名称。
我正在尝试编写一个应用程序,其中我将有一个通用对话框 window 和特定对话框 windows,它们将从通用对话框继承一些基本功能。我不确定这是最好的方法,但我就是这样做的(CGenericProject class 是从 Qt Creator 中的对话框模板创建的):
CGenericProject.h:
#include <QDialog>
namespace Ui {
class CGenericProject;
}
class CGenericProject : public QDialog
{
Q_OBJECT
public:
explicit CGenericProject(QWidget *parent = 0);
~CGenericProject();
protected:
Ui::CGenericProject *ui;
};
CGenericProject.cpp:
#include "cgenericproject.h"
#include "ui_cgenericproject.h"
CGenericProject::CGenericProject(QWidget *parent) :
QDialog(parent),
ui(new Ui::CGenericProject)
{
ui->setupUi(this);
}
CGenericProject::~CGenericProject()
{
delete ui;
}
CEisProject.h:
#include "cgenericproject.h"
class CEisProject : public CGenericProject
{
public:
CEisProject();
~CEisProject();
};
CEisProject.cpp:
#include "ceisproject.h"
CEisProject::CEisProject()
{
ui-> NO ACCESS
}
CEisProject::~CEisProject()
{
}
如您在 CEisProject.cpp
文件中所见,我无法访问从 CGenericProject
继承的 ui
字段,即使它是 protected
。我的意思是,我看到 ui
本身,但我没有看到它的方法和成员。我将在那里定义的任何其他变量都可以访问。怎么了?我将不胜感激以这种方式提供的所有帮助。
您必须添加行
#include "ui_cgenericproject.h"
到 CEisProject.cpp
文件。
CGenericProject.h
文件包含在 CEisProject.h
中,但 CEisProject.h
无法访问 CGenericProject.cpp
。在你的基础 class 的 header 中,你只有一个 Ui::CGenericProject
的前向声明,并且你将其文件包含在 .cpp 中。所以CGenericProject.cpp
知道这个class的实现。
但是 CEisProject.cpp
无法访问该文件,因此您必须在此处再次包含该文件。
注意 您的前向声明令人困惑,您应该正确缩进。此外,在您的代码中添加一些注释以明确谁在阅读它,您使用的是两个不同的 classes 具有相同的名称。