C ++ Qt4.8 ::将对象传递给另一个类-成员访问不完整类型错误

时间:2019-01-15 12:25:14

标签: c++ qt include forward-declaration

我是C ++ Qt的新手,正在努力正确使用正向声明和#include。

我想做什么:

  • 我有一个Qt Gui(Ui :: Gui类),可以在其中设置值。
  • 我想将这些值保存在Gui类变量中。
  • 单击按钮(Generate Xml)后,我想传递对象 XmlGeneratorClass的“ ui”,因此我可以使用这些值来生成Xml。

gui.h

#ifndef GUI_H
#define GUI_H

#include <QMainWindow>
#include <QDebug>
#include "xmlgeneratorqobject.h"

namespace Ui {
class Gui;
}

class Gui : public QMainWindow
{
Q_OBJECT

public:
explicit Gui(QWidget *parent = nullptr);
~Gui();

qint8 testvalue = 1;

signals:
   void transmitToXmlGen(Ui::Gui*);

private slots:
   void on_pushButtonGenerateXml_clicked();

private:
    Ui::Gui *ui;
    XmlGeneratorQObject *xmlgenerator = new XmlGeneratorQObject();
};

#endif // GUI_H

gui.cpp

#include "gui.h"
#include "ui_gui.h"

Gui::Gui(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Gui)
{
    ui->setupUi(this);
  connect(this,SIGNAL(transmitToXmlGen(Ui::Gui*)),xmlgenerator,SLOT(receiveFromGui(Ui::Gui*)));

}

Gui::~Gui()
{
    delete ui;
}

void Gui::on_pushButtonGenerateXml_clicked()
{
    emit transmitToXmlGen(ui);
}

xmlgeneratorqobject.h

#ifndef XMLGENERATORQOBJECT_H
#define XMLGENERATORQOBJECT_H

#include <QObject>
#include <QDebug>

namespace Ui {
class XmlGeneratorQObject;
class Gui;
}

class XmlGeneratorQObject : public QObject {
Q_OBJECT

public:
    explicit XmlGeneratorQObject(QObject * parent = nullptr);

private slots:

    void receiveFromGui(Ui::Gui*);
};

#endif // XMLGENERATORQOBJECT_H

xmlgeneratorqobject.cpp

#include "xmlgeneratorqobject.h"

XmlGeneratorQObject::XmlGeneratorQObject(QObject *parent){}


void XmlGeneratorQObject::receiveFromGui(Ui::Gui* objectFromGui)
{
      qDebug() << objectFromGui->testvalue; // ERROR member access into     incomplete type 'Ui::Gui'
}

预期结果: 应该可以从传递的gui对象访问公共变量

实际结果: 成员访问不完整类型'Ui :: Gui'

可以帮我学习前瞻性声明/包含吗? 我的方法总体上可以吗?

1 个答案:

答案 0 :(得分:1)

您的xmlgeneratorqobject.cpp需要该行

#include "ui_gui.h"

这为它提供了ui小部件的详细信息。该文件由Qt构建系统生成。