我有一个像这样的对话框:
每个组件'除了标题之外,属性设置为默认值。我希望包含label_3
的行与其他三行的高度相同(并且要扩展的底行将占用剩余空间,如图所示,要清除)。问题是复选框的高度与文本框的高度不同,因此行的高度不同。根据设计师的说法,在label_1
上面的图片中,朋友的高度为20,而label_3
的高度为13.在以下尝试中,以下任何一种尝试都没有做到:
layoutRowStretch
的{{1}}属性混淆无效。将高度设置为与构造函数中的其他标签高度匹配,例如:
QGridLayout
产生不正确的结果:
调试显示构造函数中的ui->label_3->setFixedHeight(ui->label_2->height());
30 ,而不是设计器中报告的20,因此label_2->height()
的行结果太大。大概这是因为此时对话框尚未显示,因此组件尚未布局。
我没有想法。什么是最干净的方法,也不涉及硬编码大小?
上述示例的Qt5项目是here。
答案 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()
的最大值并将其设置为最小值 - 两个小部件都很高。