1

我有wxNotebook两个添加的页面。每个页面使用一个wxFlexGridSizer来管理每个页面上的各种小部件。

第一页有三列小部件,第二页只有两列。第一页比第二页宽。

笔记本被调整为最宽页面(第一页)的大小。但是,在第二页上,我也想让 sizer 扩展以填充整个页面。相反,它只是调整大小以适应该页面上的小部件。

所以我的问题是:我怎样才能让第二页的尺寸扩大到整个笔记本的宽度,这是由第一页的宽度决定的?

我试过调用Layout()parent 的函数wxNotebook,但这没有帮助。

编辑:

wxNotebook *notebook = new wxNotebook(this, wxID_ANY);

wxPanel* pageOne = new wxPanel(notebook, wxID_ANY);
wxFlexGridSizer* sizer = new wxFlexGridSizer(3);
wxSizerFlags flags = wxSizerFlags().Align(wxLEFT).Border(wxRIGHT, 5);
wxStaticText* label = new wxStaticText(pageOne, wxID_ANY, wxT("Label 1"));
sizer->Add(label, flags);
label = new wxStaticText(pageOne, wxID_ANY, wxT("Label 2"));
sizer->Add(label, flags);
wxSpinCtrlDouble* value = new wxSpinCtrlDouble(pageOne, wxID_ANY, wxT("50.0"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
sizer->Add(value, flags);
pageOne->SetSizer(sizer);
notebook->AddPage(pageOne, wxT("Page 1"));

wxPanel* pageTwo = new wxPanel(notebook, wxID_ANY);
sizer = new wxFlexGridSizer(2);
flags = wxSizerFlags().Align(wxLEFT).Border(wxRIGHT, 5);
label = new wxStaticText(pageTwo, wxID_ANY, wxT("Label 1"));
sizer->Add(label, flags);
value = new wxSpinCtrlDouble(pageTwo, wxID_ANY, wxT("50.0"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
sizer->Add(value, flags);
pageTwo->SetSizer(sizer);
notebook->AddPage(pageTwo, wxT("Page 2"));

topLevelSizer->Add(notebook);
this->SetSizerAndFit(topLevelSizer);
4

1 回答 1

1

您只需要进行 2 个小改动。首先使用第二页上的 flex grid sizer,您需要调用AddGrowableCol(1)。这意味着第二列可以展开。(索引从 0 开始,因此第 1 列是第二列。)

其次,在添加旋转控制双精度时,您需要使用稍微不同的 sizer 标志。例如,像

sizer->Add(value, wxSizerFlags(0).Expand().Border(wxRIGHT, 5));

这是您发布的带有这两个更改的代码段:

wxNotebook *notebook = new wxNotebook(this, wxID_ANY);

wxPanel* pageOne = new wxPanel(notebook, wxID_ANY);
wxFlexGridSizer* sizer = new wxFlexGridSizer(3);
wxSizerFlags flags = wxSizerFlags().Align(wxLEFT).Border(wxRIGHT, 5);
wxStaticText* label = new wxStaticText(pageOne, wxID_ANY, wxT("Label 1"));
sizer->Add(label, flags);
label = new wxStaticText(pageOne, wxID_ANY, wxT("Label 2"));
sizer->Add(label, flags);
wxSpinCtrlDouble* value = new wxSpinCtrlDouble(pageOne, wxID_ANY, wxT("50.0"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
sizer->Add(value, flags);
pageOne->SetSizer(sizer);
notebook->AddPage(pageOne, wxT("Page 1"));

wxPanel* pageTwo = new wxPanel(notebook, wxID_ANY);
sizer = new wxFlexGridSizer(2);
sizer->AddGrowableCol(1);
flags = wxSizerFlags().Align(wxLEFT).Border(wxRIGHT, 5);
label = new wxStaticText(pageTwo, wxID_ANY, wxT("Label 1"));
sizer->Add(label, flags);
value = new wxSpinCtrlDouble(pageTwo, wxID_ANY, wxT("50.0"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
sizer->Add(value, wxSizerFlags(0).Expand().Border(wxRIGHT, 5));
pageTwo->SetSizer(sizer);
notebook->AddPage(pageTwo, wxT("Page 2"));

topLevelSizer->Add(notebook);

将让旋转控件展开以占用所有剩余空间,同时匹配第一页的边框。

于 2020-07-27T15:46:51.603 回答