wxSizers在wxWidgets中排列不正确

wxSizers not arranging correctly in wxWidgets

本文关键字:排列 不正确 wxWidgets wxSizers      更新时间:2023-10-16

我在一个面板内有两个wxTextCtrl和两个wxButton。我想用尺寸尺来排列。我想将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);

我该怎么办?

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

此外,还有一个提示:对于左边有标签、右边有文本控件的典型两列布局,首先使用wxFlexGridSizer而不是框大小调整器更容易。

您有两个box sizer,但您只能为面板设置一个box sizeer。根据您的要求,我认为最好添加水平分级机作为垂直分级机的第一个元素。

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。

欢呼!!