c – QGridLayout中的行大小一致

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

《c – QGridLayout中的行大小一致》

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

>使用QGridLayout的layoutRowStretch属性搞乱无效.
>我不想设置硬编码的固定高度,因为这可能在其他平台或其他主题上运行,因此我想将组件大小推迟到系统默认值.
>将高度设置为与构造函数中的其他标签高度匹配,例如:

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

产生不正确的结果:

《c – QGridLayout中的行大小一致》

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

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

上述示例的Qt5项目是here.

最佳答案 如果不手动设置大小,我看不到任何干净的方法.

但是,根据我刚刚在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()的最大值,并将其设置为两个小部件的最小高度.

点赞