доступ к wxFrame (s) & amp; wxDialog (s) глобально

Я новичок в C ++ и новичок в codelite, а также новичок в wxCrafter. Я пытаюсь создать некоторые приложения с графическим интерфейсом, но я напутал об объектном перемещении в 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;
}

Теперь я могу получить доступ к MainApp через parent, но два объекта-члена (один из них сам) не найден. Я что-то пропустил? Я действительно новичок в 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-файл класса приложения:

#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_APP а также DECLARE_APP макросы, чтобы это работало.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector