2014-11-03 63 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宏使它工作。