Events wxWidgets
Events wxWidgets
我想了解如何执行特定任务。我试图在WXWIDGETS中设置事件表,并遇到了他们的行为问题。
我在一个类中设置了一些代码:
void TopRightPanel::OnSelChanged(wxTreeEvent& event)
{
wxTreeItemId item = event.GetItem();
TreeItemData* data = (TreeItemData *) GetItemData(item);
if(data != NULL)
{
particleSystemManager->SetSelectedParticleSystem(data->particleSystem);
}
}
这可以正常工作,并且具有预期的正确值。我的问题是它是自我包含的,我希望在层次结构中上方的类别阅读TreectRL的动作,并对U.I.I的各个方面进行更改。所以我尝试了:
void Window::OnSelChanged(wxTreeEvent& event)
{
wxTreeItemId item = event.GetItem();
TreeItemData* data = (TreeItemData *) topRightPanel->GetItemData(item);//item.m_pItem.//m_MyTreeCtrl->GetItemData(itemId);*/
if(data != NULL)
{
particleSystemManager.SetSelectedParticleSystem(data->particleSystem);
}
}
现在,当调用potrightpanel-> getItemdata(数据)时,我会得到一个未经手的例外。它使用的最杰出的媒介似乎没有更新,并且似乎在数据构造函数中启动之前指向数据。无论如何,我可以解决这个问题吗?
编辑:
我像这样声明事件表:
#if USE_GENERIC_TREECTRL
BEGIN_EVENT_TABLE(TopRightPanel, wxGenericTreeCtrl)
#else
BEGIN_EVENT_TABLE(TopRightPanel, wxTreeCtrl)
#endif
EVT_TREE_SEL_CHANGED(TopRightPanel_Ctrl, Window::OnSelChanged)
END_EVENT_TABLE()
然后,我使用dectare_event_table在标题中声明表格。
you 必须在 BEGIN_EVENT_TABLE
中使用的事件表宏中使用相同的类名。IOW,您的处理程序必须在Window
事件表中定义,而不是在TopRightPanel
事件表中定义。由于树事件为wxCommandEvents
,因此它们会向上传播给父级,因此,如果Window
包含树控件,则将起作用。否则,例如如果它们是兄弟姐妹,则必须使用另一个答案中指示的Connect()
。
(重新)强烈建议阅读事件处理概述。
您不显示如何连接此事件处理程序,但是问题几乎肯定存在,而不是在您显示的代码中。如果您使用的是Connect()
,请确保将指针传递给Window
对象作为其最后一个参数,否则您最终在Window
对象上调用CC_9类的方法,并带有毫不奇怪的灾难性后果。
如果您确定确实在正确的对象上调用方法,那么我看到的唯一其他解释是,在生成此类型的第一个事件之前,您不会初始化topRightPanel
。如果是这种情况,最简单的解决方案是初始化NULL
指针并在初始化代码结束时正确设置。而且,当然,在事件处理程序中检查指针是非无效的。
- 什么是事件表 (wxWidgets)?
- 无法编译wxWidgets Hello World
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 内存所有位置 wxWidgets
- С++ wxWidgets:代码架构,设计原则和模式
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- 从 wxWidgets 中的.DLL加载图标
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- C++ wxWidgets:在创建小部件后设置字体
- C++ wxWidgets:更改大小器的字体
- meson-build:wxWidgets 资源文件,用于 Windows 未构建
- Visual Studio中的wxwidgets应用程序给出错误"LNK2019 unresolved external symbol"
- 如何在 wxWidgets 中使用 SetTabBehavior 进行C++?
- 在 wxWidgets 中的 wxTextCtrl 上手动触发 ENTER 键按下事件C++?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- wxWidgets 3.1.3 图标在 mac 下加载 - ICNS 文件不可读?
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 使用标准窗口与wxWidgets一起绘制?
- Events wxWidgets