gpt4 book ai didi

c++ - 使用 wxwidgets 不会在 C++ 中抛出事件

转载 作者:行者123 更新时间:2023-11-30 04:24:29 25 4
gpt4 key购买 nike

我做了一个 wxwidgets表格使用 wxFormBuilder ,我正在尝试在对象上引发鼠标滚轮事件。问题是没有抛出事件,所以我想问你是否应该有一些额外的设置。该对象有一个这样的事件表

BEGIN_EVENT_TABLE(MyObj, wxScrolledWindow)
EVT_MOUSEWHEEL(MyObj::OnMouseWheel)
END_EVENT_TABLE();

它是这样初始化的:

myObjInstance = new MyObj(this, ID_MYOBJ, wxPoint(10, 10), wxSize(30,30), 0);

我注意到在 wxFormBuilder 中,当从 GUI 添加事件时,function Connect使用了生成此输出的

myObjInstance ->Connect( wxEVT_MOTION, wxMouseEventHandler( MyFrame::TestMouseOnverTheEdit ), NULL, this );

但我不能使用它,因为我的事件处理程序函数 OnMouseWheel 在 MyObj 类中并且它是 protected 。

我还在 wxDev-C++ 中用这个对象和事件制作了一个框架事件被抛出。不同之处在于 wxFormBuilder 创建的表单有多个 sizer 和面板,而 wxDev-C++ 中的表单没有。有一个 similar problem解决了,但是我还是不知道该怎么办。谢谢。

编辑:经办人签名:

void OnMouseWheel(wxMouseEvent & AwxEvent);

最佳答案

“问题是没有抛出事件,”

我想事件确实发生了。你的问题是没被抓到!

以下是您需要研究的一些事项。

  1. 您的事件处理程序应该是公开的。

  2. 什么是 MyObj?它应该是 wxFrame 或其他一些标准 wxWidgets 窗口的专门化。

    BEGIN_EVENT_TABLE(MyObj, wxScrolledWindow)

    这意味着 MyObj 是 wxScrolledWindow 的特化。如果不是,正如您在评论中所建议的那样,那么事件表将无法捕捉事件。 http://wiki.wxwidgets.org/Events#Inheriting_Event_Tables_.28Events_in_Derived_Classes.29

  3. 不清楚您使用的是事件表还是 Connect() 方法。你不能同时使用两者!

  4. 如果您确实使用了 connect,则需要小心使用正确的对象来调用它。简单来说,需要调用生成事件的框架上的连接方法,而不是处理事件的对象。 http://wiki.wxwidgets.org/Events#Using_Connect.28.29

关于c++ - 使用 wxwidgets 不会在 C++ 中抛出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730898/

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