其他分享
首页 > 其他分享> > 初出茅庐之QT——布局管理器(QFormLayout)

初出茅庐之QT——布局管理器(QFormLayout)

作者:互联网

详细说明

QFormLayout是一个方便的布局类,它以两列的形式布局它的子级。左栏由标签组成,右栏由“字段”小部件(行编辑器、数字调整框等)组成。

传统上,这种两列形式的布局是使用QGridLayout实现的。QFormLayout是一种更高级别的替代方案,具有以下优点:

1,遵守不同平台的外观和感觉准则。

例如,macOS Aqua和KDE指南规定标签应该右对齐,而Windows和GNOME应用程序通常使用左对齐。

2,支持包装长行。

对于具有小型显示器的设备,可以将QFormLayout设置为环绕长行,甚至环绕所有行。

3,用于创建标签-字段对的方便API。

addRow()重载接受一个QString和一个QWidget*在幕后创建一个QLabel并自动设置它的伙伴。我们可以这样写代码:

QFormLayout *formLayout = new QFormLayout;
formLayout->addRow(tr("&Name:"), nameLineEdit);
formLayout->addRow(tr("&Email:"), emailLineEdit);
formLayout->addRow(tr("&Age:"), ageSpinBox);
setLayout(formLayout);

将其与使用QGridLayout编写的以下代码进行比较:

nameLabel = new QLabel(tr("&Name:"));
nameLabel->setBuddy(nameLineEdit);

emailLabel = new QLabel(tr("&Name:"));
emailLabel->setBuddy(emailLineEdit);

ageLabel = new QLabel(tr("&Name:"));
ageLabel->setBuddy(ageSpinBox);

QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(nameLabel, 0, 0);
gridLayout->addWidget(nameLineEdit, 0, 1);
gridLayout->addWidget(emailLabel, 1, 0);
gridLayout->addWidget(emailLineEdit, 1, 1);
gridLayout->addWidget(ageLabel, 2, 0);
gridLayout->addWidget(ageSpinBox, 2, 1);
setLayout(gridLayout);

下表显示了不同样式的默认外观。

QCommonStyle派生样式(QPlastiqueStyle除外)

 

用于Windows、GNOME和KDE早期版本的传统样式。标签是左对齐的,展开的字段将增长以填充可用空间。(这通常与使用两列QGridLayout得到的结果相对应。)

QMacStyle

 

风格基于macOS Aqua指南。标签是右对齐的,字段不会超出其大小,窗体是水平居中的。

QPlastiqueStyle

 

KDE应用程序的推荐样式。与MacStyle类似,只是窗体是左对齐的,所有字段都会增长以填充可用空间。

Qt Extended styles

 

Qt扩展样式的默认样式。标签是右对齐的,展开字段会增长以填充可用空间,并且长行可以换行。

也可以通过调用setLabelAlignment()、setFormAlignment()、setFieldGrowthPolicy()和setRowWrappPolicy()分别重写表单样式。

例如,要在所有平台上模拟QMacStyle的窗体布局外观,但使用左对齐标签,可以编写:

formLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
formLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
formLayout->setLabelAlignment(Qt::AlignLeft);

 

标签:QFormLayout,管理器,QT,formLayout,tr,addWidget,gridLayout,对齐
来源: https://blog.csdn.net/bxlover007/article/details/115079972