【问题标题】:wxWidgets fitting big wxGrid in wxFlexGridSizerwxWidgets 适合 wxFlexGridSizer 中的大 wxGrid
【发布时间】:2019-12-17 03:13:20
【问题描述】:

问题

我有一个wxGrid,在wxFlexGridSizer 中放置了许多行 (>200)。问题是我在网格下方的按钮消失了。与wxBoxSizer 相同,使用 proportion 设置。

结果应该看起来像 wxBoxSizer 解决方案。 有没有办法在这种情况下使用wxFlexGridSizer

wxBoxSizer(工作)

    wxGrid *grid = new wxGrid(this, wxID_ANY);
    grid->CreateGrid(0, 2);
    grid->SetDefaultRowSize(20);
    grid->AppendRows(200);

    wxButton *button = new wxButton(this, wxID_ANY, "button");

    wxBoxSizer *bsMain = new wxBoxSizer(wxHORIZONTAL);
    bsMain->Add(grid, 1, wxALL, 5);
    bsMain->Add(button, 0, wxALL, 5);

    SetSizer(bsMain);

wxGridSizer(不工作)

    wxGrid *grid = new wxGrid(this, wxID_ANY);
    grid->CreateGrid(0, 2);
    grid->SetDefaultRowSize(20);
    grid->AppendRows(200);

    wxButton *button = new wxButton(this, wxID_ANY, "button");

    wxFlexGridSizer *fgsMain = new wxFlexGridSizer(1, 0, 0);
    fgsMain->Add(grid, 1, wxALL, 5);
    fgsMain->Add(button, 0, wxALL, 5);
    fgsMain->AddGrowableRow(0);
    fgsMain->AddGrowableCol(0);

    SetSizer(fgsMain);

我尝试将AddGrowableRow 用于两行、比例设置、wxEXPAND 标志。

这里有一个类似的问题,但解决方法是一种变通方法:

Fitting a big grid (wxGrid) in a dialog (wxDialog)

(截图使用wxFormBuilder v3.8.1

【问题讨论】:

  • 您没有为网格和按钮设置初始大小。在不要忘记Layout()SetSizerAndFit(...) 尝试该解决方法(至少设置最小尺寸)
  • 这两个命令都不能解决我的问题。

标签: c++ user-interface wxwidgets sizer wxgrid


【解决方案1】:

默认情况下,wxGrid 将尝试在屏幕上显示其所有 200 行,这不会为按钮留下足够的空间。您可以调用 SetInitialSize()(或在其 ctor 中创建网格时指定初始大小)来更改此设置。

与这个问题无关,但我强烈建议您使用更具可读性的基于 wxSizerFlags 的 API,而不是旧的 Add() 重载。您也不应该以像素为单位对边框大小进行硬编码,这对于某些平台来说总是错误的,并且在高 DPI 显示器上会变得更糟(使用 wxSizerFlags 会自动解决这个问题)。

【讨论】:

  • SetInitialSize() 不会改变任何东西。我对两者(按钮和网格)都进行了尝试。感谢您对 wxSizerFlags 的提示,我以前从未听说过。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多