Доступ к внутреннему классу Qt C ++ к внешнему классу

У меня снова вопрос:
У меня есть класс PBV t (наследует от Tab), у которого есть класс Geometry. Геометрия является родителем Geo_1. Из Geo_1 я хочу иметь доступ к методам PBV (например, printContent. Как я могу это сделать? Я могу создавать Слоты для Сигналов, но так как мне приходится часто использовать методы PBV, это может сделать множество Слотов для Сигналов.
Вот мой код:

PBV.h:

#include "../Geometry/Geo_1.h"
class PBV : public Tab
{
Q_OBJECT
public:
explicit PBV (QWidget *parent = 0);
~ PBV ();
virtual void printContent( QStringList *const qsl);

private:
Geo_1 *GEO_1;
Geometry *GEO;
}

PBV.cpp:

 …
Geo_1 *GEO_1;
GEO_1 = new Geo_1(this);
GEO_1->set_LNE_default();
…

.

Geo_1.h:
#ifndef GEO_1_H
#define GEO_1_H
#include "Geometry.h"#include "../Tabs/PBV.h"class Geo_1: public Geometry
{
Q_OBJECT
public:
Geo_1 (QObject *_parent = 0);
virtual void set_LNE_default();
};
#endif // GEO_1_H

.

Geo_1.cpp:
#include "Geometry.h"#include <QDebug>
#include "Geo_1.h"#include "../Tabs/PBV.h"
Geo_1::Geo_1(QObject*_parent)
: Geometry(_parent) {}

void Geo_1::set_LNE_default()
{
// here I want to use printContent
}

.

Geometry.h:

#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QObject>

class Geometry : public QObject
{
Q_OBJECT
public:
Geometry(QObject *_parent=0);
~Geometry();
virtual void set_LNE_default();
};
#endif // GEOMETRY_H

.

Geometry.cpp:

#include "Geometry.h"#include <QDebug>

Geometry::Geometry(QObject *_parent)
: QObject(_parent)     {}

Geometry::~Geometry(){}
void Geometry::set_LNE_default() { }

0

Решение

Один из подходов, о котором говорится в комментариях, заключается в отслеживании родительского класса в конструкторе дочернего элемента:

В Geometry.h добавьте приватную переменную-член:

private:
PBV* m_pParentPBV;

Затем в конструкторе в Geometry.cpp установите это для родительского элемента, который вы уже передаете:

Geometry::Geometry(QObject *_parent)
: QObject(_parent)
{
m_pParentPBV = dynamic_cast<PBV*>(_parent);
}

Теперь вы можете вызывать методы для родителя, используя m_pParentPBV->printContent() и т.п.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]