QGridLayout中的行大小一致

时间:2017-05-02 00:02:44

标签: c++ qt qt5 qgridlayout

我有一个像这样的对话框:

enter image description here

每个组件'除了标题之外,属性设置为默认值。我希望包含label_3的行与其他三行的高度相同(并且要扩展的底行将占用剩余空间,如图所示,要清除)。问题是复选框的高度与文本框的高度不同,因此行的高度不同。根据设计师的说法,在label_1上面的图片中,朋友的高度为20,而label_3的高度为13.在以下尝试中,以下任何一种尝试都没有做到:

  • layoutRowStretch的{​​{1}}属性混淆无效。
  • 我不想设置硬编码的固定高度,因为这可能会在其他平台或其他主题上运行,因此我希望将组件大小推迟到系统默认值。
  • 将高度设置为与构造函数中的其他标签高度匹配,例如:

    QGridLayout

    产生不正确的结果:

    enter image description here

    调试显示构造函数中的ui->label_3->setFixedHeight(ui->label_2->height()); 30 ,而不是设计器中报告的20,因此label_2->height()的行结果太大。大概这是因为此时对话框尚未显示,因此组件尚未布局。

我没有想法。什么是最干净的方法,也不涉及硬编码大小?

上述示例的Qt5项目是here

1 个答案:

答案 0 :(得分:1)

如果不手动设置尺寸,我没有看到任何干净的方法。

然而,根据我刚刚在Qt5.5中尝试的内容,QLineEdit的minimumSizeHint在绘制之前设置(使用您在QtDesigner中看到的默认大小),因此我能够设置QCheckBox的最小大小。对话构造函数。

ui->checkBox->setMinimumHeight(ui->lineEdit->minimumSizeHint().height());

如果我在QLineEdit上手动设置minimumHeight,这会出错,因为minimumSizeHint没有改变,但使用两者中的最大值正在工作:

ui->checkBox->setMinimumHeight(qMax(ui->lineEdit->minimumSizeHint().height(),
                                    ui->lineEdit->minimumSize().height()));

修改:如果操作系统主题的复选框高度大于行编辑,则可以使用minimumSizeHint().height()的最大值并将其设置为最小值 - 两个小部件都很高。