【问题标题】:Call button click function from grandchild从孙子调用按钮单击功能
【发布时间】:2021-09-06 22:43:47
【问题描述】:

我正在创建我的第一个 C++ wxWidgets 应用程序。我正在尝试创建某种拆分按钮,其中选项显示在网格中。我有一个自定义按钮类,当右键单击它时,会打开一个包含其他按钮的自定义 wxPopupTransientWindow。 当我单击弹出窗口中的按钮时,我想模拟左键单击主按钮。我试图通过事件来实现这一点,但我有点困惑。

void expandButton::mouseReleased(wxMouseEvent& evt)
{
    if (pressed) {
        pressed = false;
        paintNow();

        wxWindow* mBtn = this->GetGrandParent();
        mBtn->SetLabel(this->GetLabel());
        mBtn->Refresh();

        wxCommandEvent event(wxEVT_BUTTON);
        event.SetId(GetId());
        event.SetEventObject(mBtn);
        mBtn-> //make it process the event somehow?

        wxPopupTransientWindow* popup = wxDynamicCast(this->GetParent(), wxPopupTransientWindow);
        popup->Dismiss();
    }
}

最好的方法是什么?

【问题讨论】:

  • mBtn->GetEventHandler()->ProcessEvent().
  • 如果mBtn已经有一个事件处理器来处理事件,那么使用wxQeueEvent并将目的地设置为m_Btndocs.wxwidgets.org/3.0/…

标签: c++ events popup wxwidgets


【解决方案1】:

您应该使用 mBtn->ProcessWindowEvent(),这是 cmets 中已经提到的 mBtn->GetEventHandler()->ProcessEvent() 的较短同义词。

请注意,一般来说,您不应该使用自己的代码创建 wxEVT_BUTTON 事件。在这种特殊情况下,对于 wxWidgets 的当前(和所有过去)版本,它可以工作,但是更清洁,并且保证也可以与未来版本一起工作,解决方案将定义您自己的自定义事件并改为生成它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多