2017-05-04 147 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方法,因爲父母不一定擁有它們。