Qt无法从继承类

时间:2015-06-20 11:20:09

标签: c++ qt user-interface inheritance objective-c++

我正在尝试编写一个应用程序,我将拥有一个通用的对话框窗口和特定的对话框窗口,这些窗口将继承通用的一些基本功能。我不确定这是最好的方法,但这就是我做的方式(CGenericProject类是从Qt Creator中的Dialog模板创建的):

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文件中看到的那样,我无法访问从ui继承的CGenericProject字段,即使它是protected。我的意思是,我看到ui本身,但我没有看到它的方法和成员。我将在那里定义的任何其他变量都是可访问的。怎么了?我希望以这种方式提供所有帮助。

1 个答案:

答案 0 :(得分:3)

您必须添加

#include "ui_cgenericproject.h"

CEisProject.cpp文件。

CGenericProject.h文件包含在CEisProject.h中,但CEisProject.h无法访问CGenericProject.cpp。在基类的标题中,您只有Ui::CGenericProject的前向声明,并将其文件包含在.cpp中。所以CGenericProject.cpp知道这个类的实现。

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

注意 你的前瞻声明令人困惑,你应该正确缩进。另外,在代码中添加一些注释,以便为阅读者添加一些清晰度,使用两个不同的同名类。