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

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

本文关键字:访问 成员 错误 类型 另一个 Qt4 对象 C++      更新时间:2023-10-16

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

我想做什么:

  • 我有一个Qt Gui(类ui::gui),我们可以在其中设置值。
  • 我想将这些值保存在 Gui 类变量中。
  • 单击按钮(生成 XML)后,我想传递对象'ui' 到 XmlGeneratorClass,所以我可以使用这些值来生成一个 Xml。

桂·

#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

桂.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

XML生成器Qobject.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"

你能帮我学习远期申报/包括吗?我的方法总体上可以吗?

你的xmlgeneratorqobject.cpp需要这行

#include "ui_gui.h"

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