c++ - 2个面板之间的通信

标签 c++ wxwidgets

在阅读 wxWiidgets 教程时我看到了这个 Tutorial其中作者创建了 wxPanelLeftPanelRightPanel 的 2 个子类。

左边有 2 个按钮,单击它们右边的文本会更新。现在有另一个类 Communicate,它有一个成员 wxPanel,其中左右面板都是子面板。

左面板有一个方法->

void LeftPanel::OnPlus(wxCommandEvent & WXUNUSED(event))
{
  count++;

  Communicate *comm = (Communicate *) m_parent->GetParent();
  comm->m_rp->m_text->SetLabel(wxString::Format(wxT("%d"), count));
}

其中 m_text 是右面板的公共(public)成员。

我怀疑这是否是一种好的交流方式。 我的问题 - 这是正确的沟通方式吗?什么是更好的方法?

最佳答案

我也看到了你说的教程。我认为这是一种很好的通信方式,因为它使用 wxwidgets 的连接事件方法(阅读事件以获取更多详细信息)。我不是 wxwidgets 方面的专家,但我总是使用这种将类小部件的事件与类的函数相关联的方式编写我的应用程序,然后该函数定位它必须更改属性的对象。

无论如何,如果你认为这个事件(按下加号按钮)会经常发生,特别是,如果你有太多的功能/按钮,比如教程中的加号和减号,可以在构造函数中定义 m_text :

在标题中:

wxStaticText *m_textlp;

在构造函数中:

m_textlp = ( (Communicate *) m_parent->GetParent() )->m_rp->m_text;

这样函数就只有:

void LeftPanel::OnPlus(wxCommandEvent & WXUNUSED(event))
{
  count++;
  m_textlp->SetLabel(wxString::Format(wxT("%d"), count));
}

关于c++ - 2个面板之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429610/

相关文章:

c++ - 如何找到wxWidgets?

c++ - 简单 wxWidgets 应用程序退出时出现段错误(每当使用文本控件时)

lua - wxLua - 如何实现取消按钮?

c++ - 使用纯虚方法克隆 C++ 类

c++ - 在 memcpy 缓冲区 UB 上使用 reinterpret_cast 吗?

c++ - 如何优雅地克服无意义的 C++ 编译器警告?

c++ - Ubuntu 上的 wxWebView 编译问题

c++ - 如何从wxWebView获取响应

c++ - Qt Creator 在 Windows 下构建错误

c++ - Inheriting (or member) traits 成语