如何使用创建的 class 中的创建 class` 方法?

How to use the creating class` methods from the created class?

我有一个问题:

我有一个class用户界面一个classMoveSeries。我想从 MoveSeries 访问我的 class 用户界面的方法。在这个例子中,我想访问用户界面的 get_MoveCurve_Delta() 方法。 如何从创建的 class(MoveSeries? 访问创建的 class(用户界面)? 我尝试了 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();
 }

您似乎想将父级转换为您想要的 class:

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

请记住,这可能很危险,因为它会假设父级的类型。

与其假设 MoveSeries 中的父 QWidget 是 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();
 }

如果您只想 UserInterface 成为 MoveSeries 的父级,请这样说:

  explicit MoveSeries(UserInterface *parent = 0);

如果您希望任何 小部件能够充当父级,您不能访问UserInterface 方法,因为父级不一定具有它们。