gpt4 book ai didi

c++ - wxButton 的事件处理函数与 Bind() - wxWidgets 3.0

转载 作者:搜寻专家 更新时间:2023-10-31 00:35:00 24 4
gpt4 key购买 nike

我正在尝试创建一个简单、基本的应用程序以开始使用 wxWidgets。我已经可以设置一个框架并在其上放置菜单、菜单项和按钮,并且它们都可以正确显示。

但是我在使用 Bind() 将事件处理程序附加到按钮时遇到了麻烦。为了稍微剥离代码,我有这个:

class MainFrameFunctions
{
public:
void buttonOneClicked(wxCommandEvent & event);
};

void MainFrameFunctions::buttonOneClicked(wxCommandEvent & event)
{
// do something
}

MainFrame::MainFrame(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint& , const wxSize& , long style, const wxString& ) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size1)
{
wxButton * buttonOne = new wxButton( panelOne, buttonOneID, wxT("Show Box"), wxPoint(70,50), wxSize(200,40) );
}

所以我想知道,如何使用 Bind() 创建事件处理程序,以将处理程序函数“buttonOneClicked”连接到 buttonOne?还有我在代码中的什么位置放置 Bind() 行?

编辑

经VZ推荐。我对程序进行了一些修改,现在主要组件如下所示:

class MainFrame: public wxFrame
{
public:
MainFrame(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint

&pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE, const wxString &name=wxFrameNameStr);

void OnExit(wxCommandEvent& event);
bool ButtonOneClicked(wxCommandEvent & event);
wxDECLARE_EVENT_TABLE();
};


class CreateNewFrame: public wxFrame
{
public:
CreateNewFrame(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint& , const wxSize&, long style);
void OnExit(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE();
};


MainFrame::MainFrame(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint& , const wxSize& , long style, const wxString& )
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, size1)
{
wxButton * buttonOne = new wxButton( panelOne, buttonOneID, wxT("Button One"), wxPoint(70,50), wxSize(200,40), 0, wxDefaultValidator, "PP" );

// while we are at it, what is the " wxDefaultValidator, "PP" " part about ? I just copied it from an example

buttonOne->Bind(wxEVT_BUTTON, &MainFrame::ButtonOneClicked, this);
}


bool MainFrame::ButtonOneClicked(wxCommandEvent & event)
{
CreateNewFrame* NewFrame = new CreateNewFrame(this, NewFrameID, "Button One Clicked", position2, size2);
NewFrame->Show( true );

return true;
}

现在的问题是,我从 CodeBlocks 13.12 收到此错误消息:

no matching function for call to 'wxButton::Bind(const wxEventTypeTag<wxCommandEvent>&, bool (MainFrame::*)(wxCommandEvent&), MainFrame* const)'|

最佳答案

只要您希望您的应用程序开始处理预期的事件,您就可以Bind() 事件处理程序。很多时候这是在构建 UI 之后完成的,因此在您的情况下,在 MainFrame() 构造函数的末尾应该没问题。

您可以在示例中找到使用 Bind() 的示例,就像许多其他 wxWidgets 功能一样;请参阅 events 示例。对于您的情况,您可以这样做

buttonOne->Bind(wxEVT_BUTTON, &MainFrameFunctions::buttonOneClicked, aMainFrameFunctionsPointer);

关于c++ - wxButton 的事件处理函数与 Bind() - wxWidgets 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com