C ++ Qt4.8 :: Передача объекта в другой класс - доступ к элементу при ошибке неполного типа - PullRequest
0 голосов
/ 15 января 2019

Я новичок в C ++ Qt и борюсь с правильным использованием предварительных объявлений и # include.

Что я хочу сделать:

  • У меня есть Qt Gui (Class Ui :: Gui), где мы можем устанавливать значения.
  • Я хочу сохранить эти значения в переменных класса Gui.
  • Как только кнопка (Generate Xml) нажата, я хочу передать объект 'ui' для класса XmlGeneratorClass, поэтому я могу использовать значения для генерации 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'
}

Ожидаемый результат: Доступ к публичным переменным из переданного графического объекта должен быть возможен

Фактический результат: доступ члена к неполному типу 'Ui :: Gui'

Не могли бы вы помочь мне изучить форвардную декларацию / включить? Мой подход в целом хорошо?

1 Ответ

0 голосов
/ 15 января 2019

Вашему xmlgeneratorqobject.cpp нужна строка

#include "ui_gui.h"

Это дает подробную информацию о виджетах пользовательского интерфейса. Этот файл сгенерирован системой сборки Qt.

...