c++ - WxWidgets:大小调整器和浪费的空间

标签 c++ wxwidgets sizer

目前在我的项目中,我有一个面板,其中的内容如下所示:

  • wxBoxSizer(wxVertical)
    • wxSearchControl(wxExpand)
    • wxListControl(wxExpand)
    • wxBoxSizer(wxHorizo​​ntal, 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/

相关文章:

python - 是否有所有可用的 wxPython 小部件的描述?

python - wxPython:一个子窗口的 SplitterWindow 和 SetMaxSize

c++ - 带有继承的 Pimpl 成语

c++ - 为什么 std::min_element 和 company 不专用于 std::vector<bool>

c++ - 编译并链接 wxGraphicContext 与 MingW

c++ - 如何使 wxScrolledWindow 居中对齐?

python - wxPython: "Super"wx.SpinCtrl with float values, layout inside sizer

c++ - wxWidgets 在 wxFlexGridSizer 中适合大的 wxGrid

c++ - 未调用 std::unique_ptr 中的自定义删除器

c++ - Windows 资源管理器打开文件夹还原