2017-05-04 3 views
0

Ich habe eine Frage:Wie verwendet man die Methoden der creating class` aus der erstellten Klasse?

Ich habe eine Klasse User-Interface dass MoveSeries eine Klasse hat. Von MoveSeries möchte ich Zugriff auf die Methoden meiner Benutzerschnittstelle haben. In diesem Beispiel möchte ich Zugriff auf die Methode get_MoveCurve_Delta() von userinterface haben. Wie bekomme ich Zugriff auf die Erstellungsklasse (userinterface) von der erstellten Klasse (MoveSeries? Ich habe den Signal-Slot-Ansatz ausprobiert, aber da ich mehrere Methoden der Benutzerschnittstelle mehrmals benutze, macht das viele Signal-Slots. hier ist

meinen Code.

Userinterface.h:

class UserInterface : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    UserInterface(QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~UserInterface(); 
    ... 
private: 
    double MoveCurve_Delta; 
    MoveSeries *MOVE_SERIES ; 
public: 
    void set_MoveCurve_Delta(double val)  { MoveCurve_Delta = val;} 
    double get_MoveCurve_Delta()  { return MoveCurve_Delta ;} 
} 

Userinterface.cpp:

UserInterface::UserInterface(QWidget *parent, Qt::WFlags flags) :   
QMainWindow(parent, flags) 
{ 
    ui.setupUi(this); 
    ... 

    MOVE_SERIES = new MoveSeries(this); 
} 

MoveSeries.h:

class MoveSeries : public QDialog 
    { 
    Q_OBJECT 
public: 
    explicit MoveSeries(QWidget *parent = 0); 
    ~MoveSeries(); 
    ... 

MoveSeries.cpp:

MoveSeries::MoveSeries(QWidget *parent) : 
QDialog(parent),ui(new Ui::MoveSeries) 
{ 
    ui->setupUi(this); 
    this->parent = parent;  
    parent->set-MoveSeries_Delta_Val(); 
} 

Antwort

2

Anstatt davon auszugehen, dass das übergeordnete QWidget in MoveSeries UserInterface ist, können Sie auch erfordern, dass es ist.

MoveSeries.h:

class UserInterface; // only need a forward declaration 

    class MoveSeries : public QDialog 
    { 
    Q_OBJECT 
public: 
    explicit MoveSeries(UserInterface *parent = 0); 
    ~MoveSeries(); 
    ... 
    UserInterface * uiparent; 
} 

MoveSeries.cpp:

#include "Userinterface.h" // include the header where it is required 

MoveSeries::MoveSeries(UserInterface *parent) : 
QDialog(parent), ui(new Ui::MoveSeries), uiparent(parent) 
{ 
    ui->setupUi(this); 
    uiparent->set-MoveSeries_Delta_Val(); 
} 
1

Es sieht aus wie Sie die Eltern der Klasse werfen wollen Sie wollen:

static_cast<UserInterface *>(parent)->get_MoveCurve_Delta(); 

Beachten Sie, dass diese könnte gefährlich sein, da es eine Annahme über den Typ des Elternteils macht.

+0

danke für deine antwort. Es klappt !!! Darf ich annehmen, dass das Problem, über das Sie sprechen, ist, dass das übergeordnete Element in userinterface * umgewandelt wird und wenn userinterface * nicht das gleiche Tippfehlerobjekt ist, wird es zu Problemen kommen? – user3443063

+0

Ja, das stimmt. Wenn Sie nachsehen können, wie Sie Ihren Code umstrukturieren, so dass das MoveCurveDelta durch einen Konstruktor übergeben oder von untergeordneten Objekten aktualisiert wird, statt umgekehrt. –

1

Wenn Sie nur UserInterface die Eltern von MoveSeries sein wollen, so sagen:

explicit MoveSeries(UserInterface *parent = 0); 

Wenn Sie möchten, beliebig Widget als in der Lage sein, als zu handeln die Eltern, Sie können nicht auf UserInterface Methoden zugreifen, weil die Eltern nicht unbedingt sie haben.

Verwandte Themen