4

我有一个这样的对话框:

在此处输入图像描述

除了标题之外,每个组件的属性都设置为默认值。我希望包含的行label_3与其他三行具有相同的高度(并且要扩展底行以占用剩余空间,如图所示,以便清楚)。问题是复选框与文本框的高度不同,因此行的高度不同。根据设计师的说法,在上图中label_1,朋友们的身高为 20,label_3身高为 13。以下尝试均未正常工作:

  • 弄乱 the 的layoutRowStretch属性是QGridLayout没有效果的。
  • 我不想设置硬编码的固定高度,因为这可能会在其他平台或其他主题上运行,因此我想将组件大小推迟到系统默认值。
  • 设置高度以匹配构造函数中的其他标签高度之一,例如:

    ui->label_3->setFixedHeight(ui->label_2->height());
    

    产生不正确的结果:

    在此处输入图像描述

    调试显示label_2->height()在构造函数中是30,而不是设计器中报告的 20 ,所以label_3最终的行太大了。这大概是因为那时还没有显示对话框,所以还没有布置组件。

我没主意了。不涉及硬编码大小的最干净的方法是什么?

上面示例的 Qt5 项目在此处

4

1 回答 1

1

如果不手动设置大小,我看不到任何干净的方法可以做到这一点。

但是,从我刚刚在 Qt5.5 中尝试的内容来看,QLineEdit 的 minimumSizeHint 是在绘制之前设置的(使用您在 QtDesigner 中看到的默认大小),因此我能够在 Dialog 构造函数中设置 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()并将其设置为两个小部件的最小高度。

于 2017-05-09T14:59:45.153 回答