[英]Why does the second wxSizer fail to center the button?
我创建了一个全局面板并调用了一个创建大小调整器和按钮的方法。 该按钮清除sizer(即面板),然后删除is。 然后,调用另一个方法,使用相同的逻辑,它创建另一个 sizer 和另一个按钮。 这次他们不工作了。
我的代码(windows,vs工作室):
#include "MainFrame.h"
#include <wx/wx.h>s
MainFrame::MainFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title)
{
panel = new wxPanel(this);
StartParty(panel);
}
void MainFrame::ClearButtonClicked(wxCommandEvent& evt)
{
panel->GetSizer()->Clear(true);
panel->SetSizerAndFit(nullptr);
ChooseMode(panel);
}
void MainFrame::StartParty(wxPanel* parent)
{
wxButton* start_button = new wxButton(parent, wxID_ANY, "Start the Party!", wxDefaultPosition, wxSize(200, 70));
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->AddStretchSpacer(1);
sizer->Add(
start_button,
0,
wxALL | wxALIGN_CENTER,
0);
sizer->AddStretchSpacer(1);
parent->SetSizerAndFit(sizer);
start_button->Bind(wxEVT_BUTTON, &MainFrame::ClearButtonClicked, this);
}
void MainFrame::ChooseMode(wxPanel* parent)
{
wxButton* select_button = new wxButton(parent, wxID_ANY, "Choose", wxDefaultPosition, wxSize(200, 70));
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->AddStretchSpacer(1);
sizer->Add(
select_button,
0,
wxALL | wxALIGN_CENTER,
0);
sizer->AddStretchSpacer(1);
parent->SetSizer(sizer);
}
如评论中所述,您确实需要Layout()
,因为这实际上是重新定位 windows - SetSizer()
只是指定用于执行此操作的大小,但不会立即执行任何操作(它会在下次调整 window 的大小,因为这会导致调用Layout()
)。
但是,即使它与问题本身有些无关,我认为您根本不应该这样做,而是使用wxSimplebook 。 这个简单的(原文如此)class 允许您向其中添加几页,然后在它们之间轻松切换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.