2017-01-16 2 views
0

J'ai encore une question: J'ai une classe PBV t (hérite de Tab) a une classe de géométrie. La géométrie est le parent de Geo_1. De Geo_1 je veux avoir accès aux méthodes de PBV (par exemple printContent Comment je fais cela? Je suis capable de créer des emplacements de signaux mais comme je dois souvent utiliser des méthodes de PBV qui feraient beaucoup de slots de signal. Voici mon code:Qt C++ classe interne accès à la classe externe

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

'dynamic_cast' /' static_cast'? – LogicStuff

+0

Pendant le constructeur de Geo_1, vous avez une référence au parent via un pointeur. Ce parent est la classe PBV puisque vous passez le pointeur "this" (c'est une supposition depuis que j'ai vu que ces lignes étaient dans le fichier PBV.cpp). Donc, si vous allez utiliser un dynamic_cast sur ce pointeur comme ce dynamic_cast (_parent); vous pourrez accéder au printContent de la classe PBV. –

+0

désolé, je ne suis pas habitué à la fonte dynamique/statique. Que voulez-vous dire? – user3443063

Répondre

0

Une approche, visée par les commentaires, est de garder une trace de la classe parente dans le constructeur de l'enfant:

Dans Geometry.h, ajoutez une variable membre privée:

private: 
    PBV* m_pParentPBV; 

Ensuite, dans le constructeur en Geometry.cpp, réglez ce paramètre parent vous êtes déjà de passage:

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

Vous pouvez maintenant appeler des méthodes sur le parent en utilisant m_pParentPBV->printContent() etc.