所以我有 QFormLayout 可以很好地管理我的 QLabel-QLineEdit 对。
问题是,我需要实现这样的目标:
水平边框/标题不是问题,但“街道”-“公寓”/“邮政编码”-“城市”对是问题。
所以我的问题是:如何将两对 QLabel-QLineEdit 作为一行添加到 QFromLayout?
如果 QFormLayout 不可能,您对其他布局(我猜是 QGridLayout)有什么建议吗?
请记住,标签在翻译成其他语言后可能具有不同的大小比例。
提前致谢!
感谢大家的回复!
我最终将 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);
做的伎俩!
此外,如果您打算像这样添加多行,我需要将所有secondLabel
s 设置为一个固定宽度。我通过对所有 s 进行两次迭代来做到这一点secondLabel
:第一次是找到最大宽度,第二次是将此宽度设置为所有这些。
有点hacky,但到目前为止我找不到更好的方法。在我看来,使用 QGridLayout 的解决方案会更加复杂。
我认为您应该创建一个 QWidget,并使用 QLabel 和 QLineEdit 获得垂直布局,然后在 QFormLayout 中添加标签。我没有时间向您展示示例,但考虑在 QVBoxLayout 中使用 QLabel-QLineEdit 创建一个 ui。通过创建用户界面,您可以轻松地添加具有相同表单的任何小部件。
所以你的主窗口。您的主布局-> 创建您的小部件-> 添加垂直布局-> 将您的 QLabel 和 QLineEdit 添加到您的小部件布局-> 将您的小部件添加到您的主布局。
我认为你应该展示一个 QtCreator-QtDesigner 教程。这会花费你一些时间,但之后你会变得更快。
如果你想添加一个没有QLineEdit出现的标签,你可以定义一个QlineEdit并隐藏它:(代码在python中,只是为了展示原理)
self._dummy = QLineEdit(self)
self._dummy.hide()
layout = QFormLayout(self)
layout.addRow("text without an edit field", self._dummy)
这是我刚刚为我的解决方案创建的一种方法,这是一个可能对某人有所帮助的伪代码版本。
def create_gb_f(self):
gb = QGroupBox("F")
ly_horiz = QHBoxLayout()
layout = QFormLayout()
layout.addRow( label, edit)
ly_horiz.addLayout(layout)
layout = QFormLayout()
layout.addRow( label, edit)
ly_horiz.addLayout(layout)
ly_horiz.addWidget( button)
gb.setLayout(ly_horiz)
return gb