c++ - 设置带有中央单元格的 3x3 QGridLayout

标签 c++ qt resize qgridlayout

我正在用 C++ Qt 4.6.3 开发一个小游戏,我偶然发现了一个布局问题。 我正在寻找的布局是一个 3x3 QGridLayout,其中中央单元格 (1,1) 包含主要小部件(这是一个棋盘游戏)。 (0,1)-cell 应该包含一个显示轮到谁的 QLabel,(1,0) 和 (1,2) 单元格被 segmentation 为 QVBoxLayouts 以容纳最多 3 个记分板,以及 (2,1) -cell 还包含某种 QLabel。

Image of the layout

这是我目前所得到的:

QGridLayout *mainLayout = new QGridLayout(this);
QVBoxLayout *leftLayout = new QVBoxLayout;
QVBoxLayout *rightLayout = new QVBoxLayout;  
mainLayout->addLayout(leftLayout,   1, 0, AlignTop);
mainLayout->addWidget(topText,      0, 1, AlignCenter);
mainLayout->addWidget(board,        1, 1);
mainLayout->addLayout(bottomText,   2, 1, AlignCenter);
mainLayout->addLayout(rightLayout,  1, 2, AlignTop);

现在,在 MS Windows(我 GF 的笔记本电脑)上,我通过重新实现 resizeEvent() 函数解决了这个问题:

void Game::resizeEvent(QResizeEvent *)
{
    mainLayout->setRowMinimumHeight(1, 0.8 * height());
    mainLayout->setColMinimumWidth(1, 0.8 * height());
    // some other stuff
}

这很好用!但是,在 Unix 上似乎存在问题(或者可能是由于版本差异?4.6 与 4.8)。在调用 setRowMininmumHeight() 方法时,似乎发出了另一个调整大小事件,导致递归调用!我希望我的应用程序可以在两个平台上运行,所以显然我必须找到另一个解决方案。我摆弄了 setRowStretch()setColStretch() 但它们都没有达到预期的结果。我尝试了各种组合,但现在我完全卡住了......

有人能解决这个看似简单的问题吗?

最佳答案

您应该使用拉伸(stretch)而不是最小尺寸来解决问题。在将小部件添加到布局后执行此代码,以将 80% 的高度分配给中间行:

mainLayout->setRowStretch(0, 1); // 10% for top row
mainLayout->setRowStretch(1, 8); // 80% for middle row
mainLayout->setRowStretch(2, 1); // 10% for bottom row

请注意,仍然遵守包含的小部件的最小尺寸限制(除非您将尺寸策略设置为忽略)。因此,如果您要分配整个高度减去第 0 行和第 2 行的两个最小尺寸(正如您所说的那样,它们应该“尽可能小”),请将 100% 分配给中间行,将 0% 分配给第 0 行和 2;他们仍然遵守最小尺寸:

mainLayout->setRowMinimumHeight(0, 20); // 20px for top row
mainLayout->setRowMinimumHeight(2, 20); // 20px for bottom row
mainLayout->setRowStretch(0, 0);
mainLayout->setRowStretch(1, 1); // remaining height for middle row
mainLayout->setRowStretch(2, 0);

关于c++ - 设置带有中央单元格的 3x3 QGridLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837516/

相关文章:

JavaFX 缩小 ImageView 尺寸

c++ - 数组中的第 K 个和

c++ - 是否有任何用于 C++ 的跨平台 GUI 库(具有平台相关的 UI 和基于脚本的布局)?

c++ - 正则表达式,丢失结果组

c++ - 如何将QRect转换为OpenGL坐标?

javascript - 如何计算图像大小以适合页眉下方和页脚上方

c++ - 在 R 中使用 C++ 编译错误 : "RcppArmadillo.h: No such file or directory"

qt - QGraphicsItem 在添加到组时自定义选择 - 奇怪的不一致结果

c++ - Qt C++ 每秒运行一次代码

java - 调整哈希表大小