wxSizers没有正确安排在wxWidgets中

时间:2015-04-08 08:35:52

标签: c++ user-interface wxwidgets

我在面板中有两个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);

我该怎么办?

2 个答案:

答案 0 :(得分:0)

首先使用panel->SetSizer()然后使用panelSizer1调用panelSizer两次,不会做任何有用的事情,因为第二次调用会替换第一次调用设置的sizer。您必须将sizer一个嵌入另一个中以实现所需的布局。

另外,提示:对于典型的2列布局,左侧是标签,右侧是文本控件,因此首先使用wxFlexGridSizer而不是框大小调整器更容易。

答案 1 :(得分:0)

你有2个盒子大小调整器,但你只能在面板上设置一个盒子大小调整器。 根据您的要求,我认为将Horizo​​ntal 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

欢呼!!