QGridLayout 中一致的行大小
Consistent row sizes in a QGridLayout
我有一个这样设置的对话框:
除标题外,每个组件的属性都设置为默认值。我希望包含 label_3
的行与其他三行的高度相同(为了清楚起见,底部的行将展开以占用剩余的 space,如图所示)。问题是复选框与文本框的高度不同,因此该行的高度不同。根据设计师的说法,在上图中,label_1
和朋友的身高为 20,而 label_3
的身高为 13。以下 None 的尝试非常正确:
- 乱用
QGridLayout
的 layoutRowStretch
属性 没有效果。
- 我不想设置 hard-coded 固定高度,因为在其他平台或其他主题下这可能是 运行,所以我想将组件大小推迟到系统默认值。
设置高度以匹配构造函数中的其他标签高度之一,例如:
ui->label_3->setFixedHeight(ui->label_2->height());
产生不正确的结果:
调试显示构造函数中的 label_2->height()
是 30,而不是设计器中报告的 20,因此 label_3
的行最终变得太大.大概这是因为此时对话框尚未显示,因此组件尚未布局。
我没主意了。不涉及硬编码大小的最干净的方法是什么?
上例的 Qt5 项目是 here.
如果不手动设置大小,我看不出有什么干净的方法可以做到这一点。
然而,根据我刚刚在 Qt5.5 中的尝试,QLineEdit 的 minimumSizeHint 是在绘制之前设置的(使用您在 QtDesigner 中看到的默认大小),因此我能够设置 QCheckBox 的最小大小在 Dialog 构造函数中。
ui->checkBox->setMinimumHeight(ui->lineEdit->minimumSizeHint().height());
如果我在 QLineEdit 上手动设置 minimumHeight,这会出错,因为 minimumSizeHint 没有改变,但使用两者中的最大值是可行的:
ui->checkBox->setMinimumHeight(qMax(ui->lineEdit->minimumSizeHint().height(),
ui->lineEdit->minimumSize().height()));
Edit:在 OS 主题的情况下,复选框的高度大于行编辑,您可以使用两者的最大值 minimumSizeHint().height()
并将其设置为两个小部件的最小高度。
我有一个这样设置的对话框:
除标题外,每个组件的属性都设置为默认值。我希望包含 label_3
的行与其他三行的高度相同(为了清楚起见,底部的行将展开以占用剩余的 space,如图所示)。问题是复选框与文本框的高度不同,因此该行的高度不同。根据设计师的说法,在上图中,label_1
和朋友的身高为 20,而 label_3
的身高为 13。以下 None 的尝试非常正确:
- 乱用
QGridLayout
的layoutRowStretch
属性 没有效果。 - 我不想设置 hard-coded 固定高度,因为在其他平台或其他主题下这可能是 运行,所以我想将组件大小推迟到系统默认值。
设置高度以匹配构造函数中的其他标签高度之一,例如:
ui->label_3->setFixedHeight(ui->label_2->height());
产生不正确的结果:
调试显示构造函数中的
label_2->height()
是 30,而不是设计器中报告的 20,因此label_3
的行最终变得太大.大概这是因为此时对话框尚未显示,因此组件尚未布局。
我没主意了。不涉及硬编码大小的最干净的方法是什么?
上例的 Qt5 项目是 here.
如果不手动设置大小,我看不出有什么干净的方法可以做到这一点。
然而,根据我刚刚在 Qt5.5 中的尝试,QLineEdit 的 minimumSizeHint 是在绘制之前设置的(使用您在 QtDesigner 中看到的默认大小),因此我能够设置 QCheckBox 的最小大小在 Dialog 构造函数中。
ui->checkBox->setMinimumHeight(ui->lineEdit->minimumSizeHint().height());
如果我在 QLineEdit 上手动设置 minimumHeight,这会出错,因为 minimumSizeHint 没有改变,但使用两者中的最大值是可行的:
ui->checkBox->setMinimumHeight(qMax(ui->lineEdit->minimumSizeHint().height(),
ui->lineEdit->minimumSize().height()));
Edit:在 OS 主题的情况下,复选框的高度大于行编辑,您可以使用两者的最大值 minimumSizeHint().height()
并将其设置为两个小部件的最小高度。