Я новичок в 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 ++. Это лучший способ (или формальный способ) сделать?
Есть удобный способ сделать вид глобальных данных в приложении 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
макросы, чтобы это работало.