2017-05-04 146 views
0

我有一个问题:如何从创建的类中使用创建类的方法?

我有一个类用户接口MoveSeries。从MoveSeries我想要访问我的类用户界面的方法。在这个例子中,我想要访问用户界面的方法get_MoveCurve_Delta()。 如何从创建的类(MoveSeries?)获得对创建类(userinterface)的访问权限我尝试了信号时隙方法,但由于我必须多次使用多种用户界面方法,所以会产生大量信号插槽。 。

这里是我的代码:

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

回答

2

而不是假设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(); 
} 
1

它看起来像要家长投给你想要的类:

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

记住,这可能是危险的,因为它对父母的类型进行了假设。

+0

感谢您的回答。有用 !!!我是否正确地认为你所谈论的问题是父母被转换为用户界面*,如果用户界面*不是同一个对象的打字错误,我会遇到问题? – user3443063

+0

是的,没错。如果您可以考虑重构您的代码,以便MoveCurveDelta通过构造函数传递或由父级更新子对象而不是其他方式。 –

1

如果只想UserInterfaceMoveSeries父,所以说:

explicit MoveSeries(UserInterface *parent = 0); 

如果你想任何小部件能够作为父母,您不能访问UserInterface方法,因为父母不一定拥有它们。