#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 *».
Я не уверен, что означает эта ошибка, но у меня такое ощущение Я отправляю неправильный объект и мне следует использовать что-то другое, кроме «это». Это правда? Если да, то какой объект мне следует использовать и как его найти?
Используя wxwidgets в C++, я пытаюсь связать событие одного класса с функциями разных классов. Вот минимальный воспроизводимый пример: [code]#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);
void MyPanelA::FuncA(wxCommandEvent& event) { wxMessageBox("This is Func A"); }
void MyPanelB::FuncB(wxCommandEvent& event) { wxMessageBox("This is Func B"); } [/code] Проблема возникает в функциях 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 *». Я не уверен, что означает эта ошибка, но у меня такое ощущение Я отправляю неправильный объект и мне следует использовать что-то другое, кроме «это». Это правда? Если да, то какой объект мне следует использовать и как его найти?