2014-11-03 64 views
0

我是C++的新手,並且是codelite的新手,也是wxCrafter的新手。我正在嘗試構建一些GUI應用程序,但我對C++中的對象傳遞感到困惑。我花了幾個小時,我只是瞭解了一點。首先,爲了在wxFrame/wxDialog之間傳遞變量,我應該創建該類的一個實例。全局訪問wxFrame和wxDialog

在frameA.cpp

void frameA::buttonAClicked() { 
    frameB * frameB1 = new frameB(NULL); 
    frameB1->connect(this); 
} 

在frameB.cpp

void frameB::connect(frameA *upper) { 
    //now I can access frameA via upper 
} 

但是對於更復雜的情況下(例如10幀),由值用戶輸入需要被幀之間共享。我認爲最好讓框架/對話框由父母處理。由於所有類都是由main.cpp觸發的,所以我認爲MainApp()將是個好主意。於是,我就這樣做:

main.cpp中:

class MainApp : public wxApp { 
public: 
frameA * frameA1; 
frameB * frameB1 
//frameC, frameD, frameE etc. 
MainApp() {} 
virtual ~MainApp() {} 
virtual bool OnInit() { 
    frameA1 = new frameA(NULL); 
    frameB1 = new frameB(NULL); 
    frameA1->connect(this); 
    frameB1->connect(this); 

    SetTopWindow(frameA); 
    return GetTopWindow()->Show(); 
} 
}; 
兩個frameA.cpp和frameB.cpp

frameA::connect(wxApp *par) { 
    this->parent = par; 
} 

現在,我能夠通過parent訪問MainApp,但沒有找到兩個成員對象(其中一個本身)。我錯過了什麼嗎?我對C++非常陌生。這是否有更好的方式(或正式的方式)去做?

回答

0

在wxWidgets應用程序中有一種方便的方法來創建一種全局數據。創建文件ApplicationData.h

#pragma once // replace with #ifndef ... if not supported by your compiler 

class frameA; 
// place here required forward declarations 
// ... 

struct ApplicationData 
{ 
    frameA* frameA1; 
    // any other data you need 
}; 

包含該文件到應用程序類h文件:

ApplicationData* pData = &wxGetApp().applicationData; 
// Set/read global data members here: 
// pData->... 

參見:

#include "ApplicationData.h" 

class MainApp: public wxApp 
{ 
public: 
    ApplicationData applicationData; // or may it private with get/set functions 
    ... 
}; 

最後,你可以從任何地方的wxWidgets應用程序的訪問applicationDatawxGetApp wxWidgets中的函數定義參考:http://docs.wxwidgets.org/2.6/wx_appinifunctions.html請注意,您必須添加IMPLEMENT_APPDECLARE_APP宏使它工作。