Qt 无法从继承类访问 *ui 指针

Qt Cannot access *ui pointer from inheriting class

本文关键字:访问 ui 指针 继承 Qt      更新时间:2023-10-16

我正在尝试编写一个应用程序,其中我将有一个通用对话框窗口和特定的对话框窗口,这些窗口将从通用窗口继承一些基本功能。我不确定这是最好的方法,但这就是我的做法(CGenericProject类是从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 。在基类的标头中,您只有一个 Ui::CGenericProject 的前向声明,并且您将其文件包含在.cpp中。所以CGenericProject.cpp知道这个类的实现。

但是CEisProject.cpp无法访问它,因此您必须在此处再次包含该文件。

注意您的前瞻声明令人困惑,您应该正确缩进它。此外,在代码中添加一些注释以明确谁在阅读它,您正在使用两个具有相同名称的不同类。