目前在我的项目中,我有一个面板,其中的内容如下所示:
- wxBoxSizer(wxVertical)
- wxSearchControl(wxExpand)
- wxListControl(wxExpand)
- wxBoxSizer(wxHorizontal, wxALIGN_CENTER)
- wxButton(wxALL)
- wxButton(wxALL)
问题是,当面板展开时,它会在按钮所在的位置下方产生浪费的空间,并且当面板收缩时也会出现相反的问题,这意味着按钮在收缩 wxListControl 之前完全从视线中移除,这是不良行为。期望的行为是这样的:当扩展时,我希望所有东西都达到它的“合适的大小”,那么唯一会继续扩展的是wxListControl,当收缩时,wxListControl应该首先收缩,直到它达到最小尺寸,然后是按钮搜索控制应该收缩。以下图片应突出显示问题。
**
底部浪费的空间:/image/lsXOv.png
按钮被破坏:/image/U50In.png
这是我的代码(仅针对小宽度、保留的错误命名等进行了编辑):
lbxEntityList = new wxListCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxLC_REPORT | wxLC_EDIT_LABELS | wxLC_HRULES,
wxDefaultValidator, wxT("Entity List Control"));
lbxEntityList->AppendColumn("Entities",wxLIST_FORMAT_LEFT, 80);
srchControl = new wxSearchCtrl(this, wxID_ANY, "", wxDefaultPosition,
wxDefaultSize);
#ifndef __WXMAC__
srchControl->ShowSearchButton( true );
#endif
srchControl->ShowCancelButton( false );
btn_RemoveEntity = new wxButton( this, wxID_ANY, wxT("Remove Entity"),
wxDefaultPosition, wxDefaultSize, 0);
btn_AddEntity = new wxButton(this, wxID_ANY, wxT("Add Entity"),
wxDefaultPosition, wxDefaultSize, 0);
sizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer* o = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(srchControl, wxSizerFlags().Expand().Border(wxALL, 10));
sizer->Add( lbxEntityList, wxSizerFlags().Expand().Border(wxALL, 10));
sizer->Add(o, 1, wxALIGN_CENTER, 5);
o->Add( btn_RemoveEntity, 0, wxALL, 5 );
o->Add( btn_AddEntity, 0, wxALL, 5 );
SetSizer( sizer );
Layout();
sizer->Fit(this);
我唯一尝试过的就是不断地在 wxFormBuilder 中使用不同的标志在不同的配置中尝试随机不同的大小调整器,徒劳地尝试让它工作,但这总是徒劳地结束。我已经看过几个 sizer 教程,得到的唯一结论是我需要编写自己的 sizer,我希望我遗漏了一些东西,而我不必这样做。
最佳答案
我将这个问题交叉发布到 wx-users 邮件列表并收到了这个答案:
In a vertical sizer, the EXPAND flag only controls the size of the control in horizontal direction. For the vertical direction, the "proportion" parameter is relevant.
Set a proportion of 0 for the search control and the bottom horizontal box sizer.
Set a proportion of 1 for the list box.
That should give you the behavior you want.
虽然答案没有提供正确的收缩行为,但它确实提供了正确的扩展行为,这在我的情况下更为重要。
关于c++ - WxWidgets:大小调整器和浪费的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19495390/