是否可以枚举wxWidgets中的wxFrame子节点?
-
06-07-2019 - |
题
我正在使用wxGlade设计器为小型应用程序生成GUI。 它生成一个继承自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生成的类派生您的类并实现这些函数。
不隶属于 StackOverflow