1

我是 C++ 新手,也是 Codelite 新手,也是 wxCrafter 新手。我正在尝试构建一些 GUI 应用程序,但我对 C++ 中的对象传递感到困惑。我花了几个小时,我才明白一点。首先,要在 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() 会是个好主意。所以我试着这样做:

主.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;
}

现在我可以通过 访问 MainAppparent了,但是没有找到两个成员对象(一个是它本身)。我错过了什么吗?我对 C++ 真的很陌生。这是更好的方式(或正式的方式)吗?

4

1 回答 1

1

在 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
    ...
};

最后,您可以applicationData从 wxWidgets 应用程序的任何地方访问:

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

另请参阅:wxGetAppwxWidgets 参考中的函数定义:http ://docs.wxwidgets.org/2.6/wx_appinifunctions.html请注意,您必须添加IMPLEMENT_APPDECLARE_APP宏才能使其工作。

于 2014-11-03T06:16:01.880 回答