gpt4 book ai didi

c++ - 事件 wxWidgets

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:09 27 4
gpt4 key购买 nike

我想了解如何完成特定任务。我试图在 wxWidgets 中设置事件表并遇到了他们行为的问题。

我在一个类中设置了一些代码:

void TopRightPanel::OnSelChanged(wxTreeEvent& event)
{
wxTreeItemId item = event.GetItem();
TreeItemData* data = (TreeItemData *) GetItemData(item);

if(data != NULL)
{

particleSystemManager->SetSelectedParticleSystem(data->particleSystem);
}

}

这工作正常并且具有预期的正确值。不过,我的问题是它是自包含的,我希望层次结构中它上面的类读取 treeCtrl 的操作并对 UI 的所有方面进行更改。所以我尝试了这个:

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);

}
}

现在,当调用 topRightPanel->GetItemData(data) 时,我得到一个未处理的异常。它使用的 topRightPanel 似乎没有更新,并且似乎在类的构造函数中实例化之前指向数据。无论如何我可以解决这个问题吗?

编辑:

我这样声明事件表:

#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()

然后我使用 DECLARE_EVENT_TABLE 在 header 中声明该表。

最佳答案

必须在您在BEGIN_EVENT_TABLE 中使用的事件表宏中使用相同的类名。 IOW,您的处理程序必须在 Window 事件表中定义,而不是在 TopRightPanel 事件表中定义。由于树事件是 wxCommandEvents,它们会向上传播到父级,因此如果 Window 包含树控件,这将起作用。否则,例如如果他们是 sibling ,则必须按照另一个答案中的说明使用 Connect()

(重新)阅读 the event handling overview强烈推荐。

关于c++ - 事件 wxWidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073518/

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