我怀疑是否有完美的替代品可以替代视力敏锐、对工作充满热情并且有大量时间致力于拖放、推拉 GUI 小部件直到一切正常的人。
但是,如果您对完成工作的工作日解决方案感到满意,那么我认为 wxWidgets sizers 做得很合理。你熟悉这些吗?指定您希望在小部件周围留出多少空间,以及您希望它们是垂直排列还是水平排列。现在您所要做的就是将您的小部件添加到 sizer 中,sizer 将自动以一种通常相当不错的首次通过方式排列它们。
作为一个简单的例子,这里有一个简单的表格。
编码:
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);
生成以下 GUI,无需任何推或拉
这是一个介绍性的,相当粗糙的教程http://neume.sourceforge.net/sizerdemo/
这是更复杂的东西http://zetcode.com/tutorials/wxwidgetstutorial/layoutmanagement/