У меня вопрос:
У меня есть класс пользовательский интерфейс тот имеет класс 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();
}
Вместо того, чтобы предполагать, что родительский 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();
}
Похоже, вы хотите привести родителя к классу, который вы хотите:
static_cast<UserInterface *>(parent)->get_MoveCurve_Delta();
Имейте в виду, что это может быть опасно, так как делает предположение о типе родителя.
Если вы хотите только UserInterface
быть родителем MoveSeries
, сказать так:
explicit MoveSeries(UserInterface *parent = 0);
Если ты хочешь любой виджет, чтобы иметь возможность выступать в качестве родителя, вы не можете получить доступ UserInterface
методы, потому что родитель не обязательно имеет их.