gpt4 book ai didi

c++ - 全局访问 wxFrame(s) & wxDialog(s)

转载 作者:行者123 更新时间:2023-12-02 10:25:46 25 4
gpt4 key购买 nike

我是 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 帧),用户输入的值需要在帧之间共享。我认为最好让 parent 处理框架/对话框。由于所有类都是由 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;
}

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

最佳答案

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

另见: wxGetApp wxWidgets 引用中的函数定义: http://docs.wxwidgets.org/2.6/wx_appinifunctions.html请注意,您必须添加 IMPLEMENT_APPDECLARE_APP宏使其工作。

关于c++ - 全局访问 wxFrame(s) & wxDialog(s),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26708464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com