我有一个wxNotebook,它增加了两个页面。每个页面使用一个wxFlexGridSizer来管理每个页面上的各种小部件。
第一页有三列小部件,第二页只有两列。第一页比第二页宽。
笔记本的大小调整到它最宽的一页(第一页)。但是,在第二页中,我想让sizer展开来填充整个页面。相反,它只是调整大小以适应页面上的小部件。
因此,我的问题是:如何使第二页的尺寸扩展到整个笔记本的宽度,这是由第一页的宽度决定的?
我尝试过调用父wxNotebook的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);发布于 2020-07-27 15:46:51
你只需要做两个小的改变。首先,在第二个页面上使用flex,您需要调用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);将允许spin控件展开以占用所有剩余的空间,同时匹配第一页的边框。
https://stackoverflow.com/questions/63115479
复制相似问题