我正在使用wxGlade設計器爲小應用程序生成GUI。 它生成一個類,它繼承自主應用程序窗口wxFrame。 爲了便於維護,我想避免在這個生成的類中編寫額外的代碼。是否有可能枚舉wxWidgets中的wxFrame子項?
但是使用wxGlade創建的所有小部件實際上都是在自動生成的方法do_layout()中創建的,並且無法在生成的類中生成的方法範圍之外訪問它們。
有沒有辦法讓某些小部件的指針在生成的類之外 - 按名稱,按類型,枚舉子項或類似的東西?
我正在使用wxGlade設計器爲小應用程序生成GUI。 它生成一個類,它繼承自主應用程序窗口wxFrame。 爲了便於維護,我想避免在這個生成的類中編寫額外的代碼。是否有可能枚舉wxWidgets中的wxFrame子項?
但是使用wxGlade創建的所有小部件實際上都是在自動生成的方法do_layout()中創建的,並且無法在生成的類中生成的方法範圍之外訪問它們。
有沒有辦法讓某些小部件的指針在生成的類之外 - 按名稱,按類型,枚舉子項或類似的東西?
所有繼承自wxWindow的類(wxFrame就是其中之一)都有一個函數「GetChildren」,它返回一個子窗口列表,然後可以枚舉它。如果您正在按名稱查找特定字段,請使用「FindWindow」功能。
其實我發現自己的答案:
wxWindowList & children = myframe->GetChildren();
for (wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext())
{
wxWindow *current = (wxWindow *)node->GetData();
// .. do something with current
}
我可以建議你嘗試wxFormBuilder。我之前也使用過wxGlade,但它對使用方式的限制太多。例如,使用wxFormBuilder,您可以爲表單上的每個控件選擇「可見性」(public,protected,private)。它也可以爲事件處理程序生成虛擬函數,所以您只需從wxFormBuilder生成的類中派生類並實現這些函數。