在2个面板之间进行通信

时间:2011-12-08 10:37:15

标签: c++ wxwidgets

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

左侧有2个按钮,单击右侧文本更新。现在还有另一个班级沟通,其中有一个成员 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 是Right Panel的公共成员。

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

1 个答案:

答案 0 :(得分:1)

我也看到了你正在谈论的教程。我认为这是一种很好的通信方式,因为它使用了wxwidgets的connect事件方法(阅读事件以获取更多细节)。我不是wxwidgets的专家,但我总是用这种方法编写我的应用程序,将类窗口小部件的事件与类的函数相关联,然后这个函数找到它必须改变属性的对象。

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

标题中的

wxStaticText *m_textlp;

在construtor中:

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