gpt4 book ai didi

c++ - wxWidgets 绑定(bind)示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:32 26 4
gpt4 key购买 nike

我正在使用 wxWidgets 2.9,但在使用 Bind() 函数时遇到了问题。 documentation对于 wxEvtHandler 说

void Bind (const EventTag &eventType, Functor functor, int id=wxID_ANY, int lastId=wxID_ANY, wxObject *userData=NULL)

对我来说,这意味着我输入这样的内容

Bind(wxEVT_PAINT, &Board::onPaint);

或者这个

Bind(wxEVT_TIMER, &TetrisController::onTimer, ID_TIMER);

但是这些在我的程序中都不起作用。wxWidgets 也有一个 explanation具有不同格式的事件:

Bind(wxEVT_COMMAND_MENU_SELECTED, &MyFrame::OnExit, this, wxID_EXIT);
Bind(wxEVT_COMMAND_MENU_SELECTED, &MyFrameHandler::OnFrameExit, &myFrameHandler, wxID_EXIT);

在列出 ID 之前,Bind() 函数似乎需要一个指向具有仿函数的对象的指针。我试过了

Bind(wxEVT_PAINT, &Board::onPaint, this);  // this points to the Board
Bind(wxEVT_TIMER, &TetrisController::onTimer, controllerPtr, ID_TIMER);

这些都不起作用。我能举个例子说明如何正确使用 Bind() 函数吗?这个函数有什么问题?

编辑:发布更多代码,希望得到答案。这是我收到的错误消息:
版本 #1

error: must use '.*' or '->*' to call pointer-to-member function in '((wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>*)this)->wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>::m_handler (...)', e.g. '(... ->* ((wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>*)this)->wxEventFunctorFunctor<wxEventTypeTag<wxPaintEvent>, void (tetris::Board::*)(wxPaintEvent&)>::m_handler) (...)'|

版本 #2

error: no matching function for call to 'wxEventFunctorMethod<wxEventTypeTag<wxTimerEvent>, TetrisController, wxCommandEvent, TetrisController>::CheckHandlerArgument(wxTimerEvent*)'
error: cannot convert 'Board*' to 'TetrisController*' in initialization

我也试过

Bind(wxEVT_TIMER, &TetrisController::onTimer, this, ID_TIMER);  // this points to the Board

我得到了第二个错误。我真的很想知道如何正确使用 Bind() 函数。

最佳答案

原来编译器提示我使用的事件类型 (wxCommandEvent)。当我将它更改为 wxTimerEvent 时,版本 #2 开始工作。

关于c++ - wxWidgets 绑定(bind)示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023632/

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