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

C++ Qt4.8 :: Pass Object to another Class - member access into incomplete type error

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

我想做的事情:

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 对象访问 public 变量

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

你能帮我学习前向声明/包含吗? 我的做法大体上可以吗?

您的 xmlgeneratorqobject.cpp 需要行

#include "ui_gui.h"

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