【发布时间】:2016-10-16 02:52:08
【问题描述】:
我正在尝试使用 wxWidgets 创建一些对话框。我正在努力让它们以一种吸引人的标准方式进行布局。在下面的示例中,我正在尝试创建带有一行 ok & cancel 按钮的框布局。下图是我实际得到的。
Form2::Form2() :wxFrame(nullptr, wxID_ANY, L"Simple form")
{
wxBoxSizer* bSizer1;
bSizer1 = new wxBoxSizer(wxVERTICAL);
wxStaticBox* box = new wxStaticBox(this, wxID_ANY, "BOX");
wxStaticBoxSizer *sz = new wxStaticBoxSizer(box, wxVERTICAL);
wxBoxSizer* box2 = new wxBoxSizer(wxHORIZONTAL);
box2->Add(new wxStaticText(box, wxID_ANY, "static text"));
box2->AddSpacer(10);
newText = new wxTextCtrl(box, wxID_ANY, "add me");
box2->Add(newText);
box2->AddSpacer(10);
wxButton* btnAdd = new wxButton(box, wxID_ANY, "Add");
box2->Add(btnAdd);
sz->Add(box2,0, wxALL, 5);
lstFile = new wxListBox(box, wxID_ANY, wxDefaultPosition, wxSize(400,500), 0, NULL, wxLB_SINGLE | wxLB_NEEDED_SB);
sz->Add(lstFile, 0, wxALL, 5);
bSizer1->Add(sz);
wxStdDialogButtonSizer* stb = new wxStdDialogButtonSizer( );
stb->AddButton(new wxButton(this, wxID_OK));
stb->AddButton(new wxButton(this, wxID_CANCEL));
stb->Realize();
bSizer1->Add(stb);
this->SetSizer(bSizer1);
this->Layout();
this->Centre(wxBOTH);
}
首先,我不明白为什么我需要box2->AddSpacer 命令,根据文档,我应该能够通过在各自的添加命令中使用 wxLEFT 和 10 向 TextControl 和 Button 添加左填充,但这并没有做任何事情。
下一个问题是顶行的 3 个对象应该垂直对齐,但是像 box2->Add(newText, wxALIGN_CENTER);''' orwxALIGN_CENTER_VERTICAL`` 对所有 3 个组件设置垂直对齐只会改变它们之间的间距。
最严重的问题是确定和取消按钮根本不出现。如果我删除bSizer1->Add(stb) 命令,确定按钮会出现在最顶部,大概覆盖了取消按钮,但我不能确定。
我不知道去哪里寻求帮助。文档没有包含太多示例,示例代码有点像狗的早餐。他们中的大多数都有相当随意的布局。
【问题讨论】: