【发布时间】:2021-03-15 11:54:00
【问题描述】:
我正在使用 sizer 将按钮放置在网格中:
但是,我不希望 sizer 使用窗口中的所有空间,而只是使用一个小区域,如下所示(在白色区域中):
这有可能实现吗?如果是,如何? 请知道我是 wxWidgets 的新手。
顺便说一下,下面是框架背后的代码:
Main::Main() : wxFrame(nullptr, wxID_ANY, "IKE Calculator", wxDefaultPosition, wxSize(500, 650), wxDEFAULT_FRAME_STYLE & ~wxMAXIMIZE_BOX & ~wxRESIZE_BORDER)
{
int w = 3, h = 3;
NumBtn = new wxButton*[w*h];
NumSizer = new wxGridSizer(w, h, 0, 0);
//Populate sizer
int cycle = 1;
for (int x = 0; x < w; x++)
{
for (int y = 0; y < h; y++)
{
int current = (y * w + x);
NumBtn[current] = new wxButton(this, BUTTON_NUM + current, std::to_string(cycle));
NumSizer->Add(NumBtn[current], 1, wxEXPAND | wxALL);
cycle++;
}
}
this->SetSizer(NumSizer);
NumSizer->Layout();
}
Main::~Main()
{
delete[] NumBtn;
}
【问题讨论】:
-
你能贴出你的代码吗?特别是 - 您是否有任何其他控件,以及如何将按钮添加到 sizer?
-
好的,我会编辑这篇文章
-
2 解决方案:您可以尝试为框架指定初始大小,也可以覆盖
DoGetBestSize()并返回按钮的最小大小。但一般来说 - 你为什么需要它?即使你实现了你想要的,当用户调整框架控件的大小时,它也会随之调整大小。这就是sizer的全部想法。您也可以尝试仅使用wxEXPAND或仅使用0作为最后一个参数。