我正在使用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生成的类派生您的类并实现这些函数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top