首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何使一个sizer扩展到整个wxNotebook页面?

我如何使一个sizer扩展到整个wxNotebook页面?
EN

Stack Overflow用户
提问于 2020-07-27 12:35:08
回答 1查看 187关注 0票数 1

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

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

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

因此,我的问题是:如何使第二页的尺寸扩展到整个笔记本的宽度,这是由第一页的宽度决定的?

我尝试过调用父wxNotebookwxNotebook函数,但这并没有帮助。

编辑:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-27 15:46:51

你只需要做两个小的改变。首先,在第二个页面上使用flex,您需要调用AddGrowableCol(1)。这意味着第二列可以展开。(起诉书从0开始,因此第1列是第二列。)

第二,在添加自旋控制加倍时,需要使用稍微不同的sizer标志。例如,类似于

代码语言:javascript
复制
sizer->Add(value, wxSizerFlags(0).Expand().Border(wxRIGHT, 5));

下面是您在这两个更改中发布的代码片段:

代码语言:javascript
复制
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控件展开以占用所有剩余的空间,同时匹配第一页的边框。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63115479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档