【问题标题】:How to add two label-field pair as one row to QFormLayout?如何将两个标签字段对作为一行添加到 QFormLayout?
【发布时间】:2015-09-21 06:07:46
【问题描述】:

所以我有 QFormLayout 可以很好地管理我的 QLabel-QLineEdit 对。
问题是,我需要实现这样的目标:

水平边界/标题不是问题,但“街道”-“公寓”/“邮政编码”-“城市”对是问题。

所以我的问题是:如何将两对 QLabel-QLineEdit 作为一行添加到 QFromLayout?

如果 QFormLayout 无法实现,您对其他布局(我猜是 QGridLayout)有什么建议吗?

请记住,标签在翻译成其他语言后可能具有不同的大小比例。

提前致谢!

【问题讨论】:

  • 在 QtDesigner 中简单地点击一下怎么样?应该比较直接。是的,您可以在代码中使用 QGridLayout,只需将 Appartment 和 City 放入第 1 列,而单行将 columnSpan 设置为 -1。

标签: c++ qt5 qtwidgets


【解决方案1】:

感谢大家的回复!

我最终将 QLabel 添加为标签,并将 QHBoxLayout 与 QLineEdit、QLabel 和 QLineEdit 作为字段添加到 QFormLayout。 比如:

QLabel firstLabel, secondLabel;
QLineEdit fisrtEdit, secondEdit;

QHBoxLayout hBoxLayout;
hBoxLayout.addWidget(firstEdit);
hBoxLayout.addWidget(secondLabel);
hBoxLayout.addWidget(secondEdit);

QWidget container;
container.setLayout(hBoxLayout);

myFormLayout.addRow(firstLabel, container);

做到这一点!

另外,如果您打算像这样添加多行,我需要将所有secondLabels 设置为一个固定宽度。我通过对所有 secondLabels 进行两次迭代来做到这一点:第一次是找到最大宽度,第二次是将此宽度设置为所有这些。

有点老套,但到目前为止我找不到更好的方法。在我看来,使用 QGridLayout 的解决方案会更加复杂。

【讨论】:

    【解决方案2】:

    我认为您应该创建一个 QWidget,并使用 QLabel 和 QLineEdit 获得垂直布局,然后在 QFormLayout 中添加标签。我没有时间向您展示示例,但考虑在 QVBoxLayout 中使用 QLabel-QLineEdit 创建一个 ui。 通过创建用户界面,您可以轻松地添加任何具有相同表单的小部件。

    所以你的主窗口。你的主布局 -> 创建你的小部件 -> 添加垂直布局 -> 将你的 QLabel 和 QLineEdit 添加到你的小部件布局 -> 将你的小部件添加到你的主布局。

    我认为你应该展示一个 QtCreator-QtDesigner 教程。这需要你一些时间,但之后你会变得更快。

    【讨论】:

    • 感谢您的回复!不幸的是,我真的无法理解你的意思。请您更详细地描述您的解决方案吗?
    • 最好使用嵌套布局管理(原生Qt方案)。这意味着您为您的右列创建一个单独的 QFormLayout 并使用 addRow(QLayout * layout) 将其添加到您的父布局中。
    • dazewell 使用 QDesigner 来做 ui 的方式要快得多,这就是你用我的解决方案所做的。 @Roman 使用 QtCreator。创建一个新类 -> Qt -> Qt form -> Widget -> 在你的 widget.ui 中创建一个 QLabel 和 QLineEdit,右键单击 -> 垂直布局。返回您要添加 QLabel-QLineEdit 的主类中,创建一个自定义小部件类的对象,然后创建一个 layout->addWidget(yourWidget);
    【解决方案3】:

    如果你想添加一个不显示 QLineEdit 的标签,你可以定义一个 QlineEdit 并隐藏它: (代码是python,只是为了说明原理)

    self._dummy = QLineEdit(self)
    self._dummy.hide()
    layout = QFormLayout(self)
    layout.addRow("text without an edit field", self._dummy)
    

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 1970-01-01
      • 2016-08-24
      • 2019-10-20
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      相关资源
      最近更新 更多