c++ - QGridLayout 中一致的行大小

标签 c++ qt qt5 qgridlayout

我有一个这样设置的对话框:

enter image description here

除标题外,每个组件的属性都设置为默认值。我希望包含 label_3 的行与其他三行的高度相同(为了清楚起见,底部的行将展开以占用剩余空间,如图所示)。问题是复选框与文本框的高度不同,因此该行的高度不同。根据 Designer 的说法,在上图中,label_1 和 friend 的高度为 20,而 label_3 的高度为 13。以下尝试均不正确:

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

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

    产生不正确的结果:

    enter image description here

    调试显示构造函数中的 label_2->height()30,而不是 designer 中报告的 20,所以 label_3' s 行最终太大。这大概是因为此时尚未显示对话框,因此尚未布置组件。

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

上例的 Qt5 项目是 here .

最佳答案

如果不手动设置大小,我看不到任何干净的方法来执行此操作。

但是,从我刚刚在 Qt5.5 中尝试的情况来看,QLineEdit 的 minimumSizeHint 是在绘制之前设置的(使用您在 QtDesigner 中看到的默认大小),因此我能够在对话框构造函数。

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

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

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

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

关于c++ - QGridLayout 中一致的行大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43728165/

相关文章:

c++ - 后期不可复制成员初始化

C++ 实例化一个类

c++ - 如何在Qt中的QGridLayout中设置QPushButton的大小

c++ - 当调用 QTcpSocket::close() 时会发生什么?

qt - 连接到QNetworkReply::错误信号

c++ - QJSonArray 到 QString 的转换

c++ - 如何转换boost::fusion::vector的类型?

C++ 运算符重载和继承

c++ - 未调用 Qt incomingConnections

c++ - QML QSettings 和 QML - 无法保存/加载设置