我是C ++的新手,也是codelite的新手,也是wxCrafter的新手。我正在尝试构建一些GUI应用程序,但我在C ++中搞砸了对象passthrough。我花了几个小时,我只是理解了一点。首先,要在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 :(得分: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文件中:
#include "ApplicationData.h"
class MainApp: public wxApp
{
public:
ApplicationData applicationData; // or may it private with get/set functions
...
};
最后,您可以从wxWidgets应用程序的任何位置访问applicationData
:
ApplicationData* pData = &wxGetApp().applicationData;
// Set/read global data members here:
// pData->...
另请参阅:wxWidgets中的wxGetApp
函数定义参考:http://docs.wxwidgets.org/2.6/wx_appinifunctions.html请注意,您必须添加IMPLEMENT_APP
和DECLARE_APP
宏才能使其正常工作。