我在面板中有两个wxTextCtrl
和两个wxButton
。我想用sizer安排它们。我想将wxTextCtrl
s置于水平位置,wxButton
s置于垂直位置。它似乎不起作用,这是我的代码:
wxPanel* panel = new wxPanel(this);
wxPanel* panel2 = new wxPanel(this);
wxStaticText* u = new wxStaticText(panel, wxID_ANY, "Username");
uid = new wxTextCtrl(panel, wxID_ANY);
wxStaticText* p = new wxStaticText(panel, wxID_ANY, "Password");
pass = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD);
wxButton* r = new wxButton(panel, 1, "Register");
wxStaticLine* line = new wxStaticLine(panel2, wxID_ANY, wxDefaultPosition, wxSize(0,15));
wxButton* l = new wxButton(panel, 2, "Login");
//wxDefaultSize, wxTE_MULTILINE | wxHSCROLL | wxTE_READONLY);
wxBoxSizer* panelSizer1 = new wxBoxSizer(wxHORIZONTAL);
panelSizer1->Add(u, wxSizerFlags().Top());
panelSizer1->Add(uid, wxSizerFlags().Top());
panelSizer1->Add(p, wxSizerFlags().Top());
panelSizer1->Add(pass, wxSizerFlags().Top());
panel->SetSizer(panelSizer1);
wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL);
panelSizer->Add(l, wxSizerFlags().Center());
panelSizer->Add(line, wxSizerFlags().Center());
panelSizer->Add(r, wxSizerFlags().Center());
panel->SetSizer(panelSizer);
我该怎么办?
答案 0 :(得分:0)
首先使用panel->SetSizer()
然后使用panelSizer1
调用panelSizer
两次,不会做任何有用的事情,因为第二次调用会替换第一次调用设置的sizer。您必须将sizer一个嵌入另一个中以实现所需的布局。
另外,提示:对于典型的2列布局,左侧是标签,右侧是文本控件,因此首先使用wxFlexGridSizer而不是框大小调整器更容易。
答案 1 :(得分:0)
你有2个盒子大小调整器,但你只能在面板上设置一个盒子大小调整器。 根据您的要求,我认为将Horizontal sizer添加为垂直分级器的第一个元素会更好。
panelSizer1->Add(u, wxSizerFlags().Top());
panelSizer1->Add(uid, wxSizerFlags().Top());
panelSizer1->Add(p, wxSizerFlags().Top());
panelSizer1->Add(pass, wxSizerFlags().Top());
wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL);
panelSizer->Add(panelSizer1, wxSizerFlags().Center());
panelSizer->Add(l, wxSizerFlags().Center());
panelSizer->Add(line, wxSizerFlags().Center());
panelSizer->Add(r, wxSizerFlags().Center());
panel->SetSizer(panelSizer);
如果您在使用wxWidgets构建UI时遇到问题,请尝试使用wxformbuilder。
欢呼!!