在 wxBoxSizer 的完整方向上分布和居中项目而不拉伸

use*_*862 1 c++ wxwidgets

我只是在学习 sizers 并且对如何实现这一点感到有些困惑。

如果我在一个框架中有一个水平框 sizer 并向其添加两个按钮(每个按钮的比例为“1”),那么它们都将拉伸以占据 sizer 的整个水平宽度(等于框架的整个水平宽度) ) 并均匀分布(参见下面的示例 1)。

示例 1 代码:

wxFrame* frame = new wxFrame(nullptr, wxID_ANY, "Frame");
wxPanel* panel = new wxPanel(frame, wxID_ANY);

wxBoxSizer* buttonSizer = new wxBoxSizer(wxHORIZONTAL);

wxButton* buttonOk = new wxButton(panel, wxID_OK, "Ok");
wxButton* buttonCancel = new wxButton(panel, wxID_CANCEL, "Cancel");

buttonSizer->Add(buttonOk, 1, wxALL, 10);
buttonSizer->Add(buttonCancel, 1, wxALL, 10);

panel->SetSizerAndFit(buttonSizer);
frame->Show();
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望这些按钮保持其原始大小(不被拉伸),但仍然均匀分布在框架中,并且仍然在每个 wxSizerItem 内水平居中怎么办?也就是说,水平 sizer 的两个“列”都占据了对话框的一半,并且每个按钮都在这些列中的每一列中居中?我将如何做到这一点?这是一张图。按钮应该是它们的默认大小。

______________________________________
|    | Button 1 |    | Button 3 |    |
--------------------------------------
Run Code Online (Sandbox Code Playgroud)

以下代码不起作用:

buttonSizer->Add(buttonOk, 0, wxALL, 10);
buttonSizer->Add(buttonCancel, 0, wxALL, 10);
Run Code Online (Sandbox Code Playgroud)

小智 5

一种方法是使用拉伸垫片:

buttonSizer->AddStretchSpacer();
buttonSizer->Add(buttonOk, 0, wxALL, 10);
buttonSizer->AddStretchSpacer();
buttonSizer->Add(buttonCancel, 0, wxALL, 10);
buttonSizer->AddStretchSpacer();
Run Code Online (Sandbox Code Playgroud)