2011-12-08 101 views
2

我看到這個Tutorial這裏筆者已經創造wxPanelLeftPanelRightPanel的2子類。溝通2面板之間

左邊有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是右側面板的公共成員。

我懷疑這是否是一種很好的溝通方式。 我的問題 - 這是正確的溝通方式嗎?什麼會是更好的方法?

回答

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

這將只在左面板在右面板之前構造時才起作用,否則m_textlp的分配將取消未初始化的指針。但是,如果您先構建左側面板,則無法使用相同的技術與右側進行通信。 – ravenspoint

+0

@ravenspoint在這個例子中,左面板是在右面板之前構建的,所以沒有得到你說它不能使用相同技術的原因。 –

+0

因爲左面板嘗試初始化m_textrp時右面板不會被初始化。 – ravenspoint