Как использовать методы создания класса из созданного класса?

У меня вопрос:

У меня есть класс пользовательский интерфейс тот имеет класс MoveSeries. Из MoveSeries я хочу получить доступ к методам моего пользовательского интерфейса класса. В этом примере я хочу получить доступ к методу get_MoveCurve_Delta () пользовательского интерфейса. Как получить доступ к создающему классу (userinterface) из созданного класса (MoveSeries? Я попробовал Signal-Slot-Approach, но так как мне приходится использовать несколько методов пользовательского интерфейса несколько раз, это делает много сигнальных слотов …

вот мой код:

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();
}

0

Решение

Вместо того, чтобы предполагать, что родительский QWidget в MoveSeries — UserInterface, вы также можете требовать что это.

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();
}
2

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

Похоже, вы хотите привести родителя к классу, который вы хотите:

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

Имейте в виду, что это может быть опасно, так как делает предположение о типе родителя.

1

Если вы хотите только UserInterface быть родителем MoveSeries, сказать так:

  explicit MoveSeries(UserInterface *parent = 0);

Если ты хочешь любой виджет, чтобы иметь возможность выступать в качестве родителя, вы не можете получить доступ UserInterface методы, потому что родитель не обязательно имеет их.

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