IMO,应避免使用此类“表单设计器”工具。对于不知道自己在做什么的人来说,它们就像拐杖。问题是它们会生成大量用户不理解的代码。它们非常适合快速开发玩具应用程序的快速原型。但是,有一天您的一个应用程序可能会成长为需要维护的成功产品。你猜怎么了?这些工具有限且有缺陷,不能用于维护任何真正复杂或复杂的 GUI。因此,该工具生成的所有无法维护的代码都必须由一直使用该工具且尚未学会如何编写 GUI 代码的人重写!
这个过程在我身上发生过几次,早在 GUI 刚开始流行的时候。然后我了解到,学习如何编写 GUI 是无可替代的,唯一的办法就是卷起袖子写代码。
我明白为什么表单生成器工具如此受欢迎。许多 GUI 框架是编写代码的一大难题:需要大量代码来指定每个最后一个控件的左上角和右下角像素位置——无论何时移动任何东西,都必须更改所有这些位置。 (这里想到 MFC 和 .NET)
这就是 wxWidgets 得分高的地方。如果您学会使用 sizers,那么您就不必再次指定像素位置。所以,这是我对原始问题的回答:避免使用所有这些质量可疑且与 Eclipse 集成存在问题的表单构建器工具,而是学习使用 sizer,以便您可以直接在 Eclipse 编辑器窗口中编写 GUI。
作为一个简单的例子,这里是一个表单的代码。
wxPanel * panel = new wxPanel(this,-1,wxPoint(-1,-1),wxSize(1000,1000));
wxSizerFlags szrflags(0);
szrflags.Border(wxALL,5);
wxBoxSizer * szrCRUDForm = new wxBoxSizer(wxVERTICAL );
wxFlexGridSizer * szr = new wxFlexGridSizer(2,1,1);
wxStaticText * field1text = new wxStaticText(panel,-1,"Entry Field #1");
wxTextCtrl * field1ctrl = new wxTextCtrl(panel,-1," ");
wxStaticText * field2text = new wxStaticText(panel,-1,"Second Entry Field");
wxTextCtrl * field2ctrl = new wxTextCtrl(panel,-1," ");
wxStaticText * field3text = new wxStaticText(panel,-1,
"A very big entry field\n"
"with a lot of description\n"
"Spread over several long lines of text");
wxTextCtrl * field3ctrl = new wxTextCtrl(panel,-1,"",wxPoint(-1,-1),
wxSize(600,-1));
wxStaticText * field4text = new wxStaticText(panel,-1,"Yet another Field");
wxTextCtrl * field4ctrl = new wxTextCtrl(panel,-1," ");
szr->Add( field1text,szrflags );
szr->Add( field1ctrl,szrflags );
szr->Add( field2text,szrflags );
szr->Add( field2ctrl,szrflags );
szr->Add( field3text,szrflags );
szr->Add( field3ctrl,szrflags );
szr->Add( field4text,szrflags );
szr->Add( field4ctrl,szrflags );
wxBoxSizer * szrButtons = new wxBoxSizer( wxHORIZONTAL );
szrButtons->Add( new wxButton(panel,-1,L"CREATE"),szrflags);
szrButtons->Add( new wxButton(panel,-1,L"READ"),szrflags);
szrButtons->Add( new wxButton(panel,-1,L"UPDATE"),szrflags);
szrButtons->Add( new wxButton(panel,-1,L"DELETE"),szrflags);
szrCRUDForm->Add( szr );
szrCRUDForm->Add( szrButtons );
SetSizer(szrCRUDForm);
Produces the following GUI, without requiring any pushing or pulling
生成以下 GUI
这是一个sizer教程https://zetcode.com/gui/wxwidgets/layoutmanagement/