【问题标题】:WXWidgets Sizers leaving a gap at the sideWXWidgets Sizer 在旁边留有空隙
【发布时间】:2026-02-14 12:10:02
【问题描述】:

我的项目在主框架上有一个 BoxSizer,然后该 BoxSizer 包含一个作为 Gride Sizer 的面板。尺寸器按预期工作,直到窗口水平尺寸超过某个点,然后没有任何东西会水平拉伸。当屏幕最大化时,右侧有一个间隙,但元素正确占据了整个垂直高度。

MyFrame::MyFrame(const wxString& title,const wxPoint& pos,const wxSize& size)
: wxFrame(NULL,wxID_ANY,title,pos,size){
   box=new wxBoxSizer(wxHORIZONTAL);
   panel=new wxPanel(this);
   grid=new wxGridSizer(14,7,3,3);
   //add all the elements to the grid, in this way
   grid->Add(new CustomButton("Text",panel),1,wxEXPAND);
   panel->SetSizer(grid);
   box->Add(panel);
   this->SetSizer(box);
}

当屏幕最大化时,它看起来像这样。

[框文本和元素] [间隙] [窗口边界]

[框文本和元素] [间隙] [窗口边界]

[窗户的边界]

我不想要间隙,我希望盒子伸到窗户的边缘。

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    您必须同时使用非零(通常只有 1)比例和 wxEXPAND 以及* box sizer 才能使您的代码按预期工作。为 grid sizer 元素指定wxEXPAND 足以使它们扩展到面板中的可用空间,但面板本身并未配置为扩展以占用框架中的所有空间,因此不会。

    但实际上,在您想要扩展以填充所有可用空间的框架内有一个面板的情况非常普遍,因此对它有特殊的支持:事实上,如果您不使用 box sizer ,它已经可以正常工作了,因为默认情况下,框架将调整其唯一子项的大小以占用其中的所有空间。

    【讨论】: