【问题标题】:access wxFrame(s) & wxDialog(s) globally全局访问 wxFrame(s) & wxDialog(s)
【发布时间】:2014-12-29 18:26:14
【问题描述】:

我是 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() 会是个好主意。所以我尝试这样做:

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++ 真的很陌生。这是更好的方式(或正式的方式)吗?

【问题讨论】:

    标签: c++ wxwidgets codelite


    【解决方案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
        ...
    };
    

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

    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 宏才能使其工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 2014-11-02
      • 2021-10-23
      • 2012-12-18
      • 2014-02-14
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多