Как в WXwidgets связать событие одного класса с функцией из другого класса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как в WXwidgets связать событие одного класса с функцией из другого класса?

Сообщение Anonymous »

Используя wxwidgets в C++, я пытаюсь связать событие одного класса с функциями разных классов. Вот минимальный воспроизводимый пример:

Код: Выделить всё

#include 
#include 
#include 

class MyApp : public wxApp
{
public:
virtual bool OnInit();
};

IMPLEMENT_APP(MyApp)

class Notebook : public wxFrame
{
public:
Notebook(const wxString& title);
};

class MyPanelA : public wxPanel
{
public:
MyPanelA(wxNotebook* parent);
void FuncA(wxCommandEvent& event);
};

class MyPanelB : public wxPanel
{
public:
MyPanelB(wxNotebook* parent);
void FuncB(wxCommandEvent& event);
};

bool MyApp::OnInit()
{

Notebook* notebook = new Notebook(wxT("Notebook"));
notebook->Show(true);

return true;
}

Notebook::Notebook(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(400, 350))
{

wxNotebook* nb = new wxNotebook(this, -1, wxPoint(-1, -1),
wxSize(-1, -1), wxNB_BOTTOM);

MyPanelA* panel1 = new MyPanelA(nb);
MyPanelB* panel2 = new MyPanelB(nb);

nb->AddPage(panel1, wxT("Sheet1"));
nb->AddPage(panel2, wxT("Sheet2"));

CreateStatusBar();
Center();
}

MyPanelA::MyPanelA(wxNotebook* parent)
: wxPanel(parent, wxID_ANY)
{
wxButton* Button1 = new wxButton(this, wxID_ANY, wxT("Button A"));
Button1->Bind(wxEVT_BUTTON, &MyPanelA::FuncA, this, wxID_ANY);
//Button1->Bind(wxEVT_BUTTON, &MyPanelB::FuncB, this, wxID_ANY);
}

MyPanelB::MyPanelB(wxNotebook* parent)
: wxPanel(parent, wxID_ANY)
{
wxButton* Button2 = new wxButton(this, wxID_ANY, wxT("Button B"));
Button2->Bind(wxEVT_BUTTON, &MyPanelB::FuncB, this, wxID_ANY);
//Button2->Bind(wxEVT_BUTTON, &MyPanelA::FuncA, this, wxID_ANY);
}

void MyPanelA::FuncA(wxCommandEvent& event)
{
wxMessageBox("This is Func A");
}

void MyPanelB::FuncB(wxCommandEvent& event)
{
wxMessageBox("This is Func B");
}
Проблема возникает в функциях MyPanelA::MyPanelA(wxNotebook* родительский) и MyPanelB::MyPanelB(wxNotebook* родительский). Давайте сосредоточимся на первом. Если я использую строку привязки Button1->Bind(wxEVT_BUTTON, &MyPanelA::FuncA, this, wxID_ANY), как в приведенном выше коде, все работает нормально. Но если вместо этого я использую следующую закомментированную строку Button1->Bind(wxEVT_BUTTON, &MyPanelB::FuncB, this, wxID_ANY), которая ссылается на функцию в PanelB, я получаю ошибку компилятора: «невозможно преобразовать аргумент 1 из EventHandler» * const» на «T *».
Я не уверен, что означает эта ошибка, но у меня такое ощущение Я отправляю неправильный объект и мне следует использовать что-то другое, кроме «это». Это правда? Если да, то какой объект мне следует использовать и как его найти?

Подробнее здесь: https://stackoverflow.com/questions/788 ... a-differen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»