Класс QFormLayout
Класс QFormLayout управляет формами виджетов ввода и их связанными метками. Подробнее...
| Заголовок: | #include <QFormLayout> |
| qmake: | QT += widgets |
| С момента версии: | Qt 4.4 |
| Наследует: | QLayout |
Открытые типы
| enum | FieldGrowthPolicy { FieldsStayAtSizeHint, ExpandingFieldsGrow, AllNonFixedFieldsGrow } |
| enum | ItemRole { LabelRole, FieldRole, SpanningRole } |
| enum | RowWrapPolicy { DontWrapRows, WrapLongRows, WrapAllRows } |
Свойства
|
|
Открытые функции
| QFormLayout(QWidget *parent = Q_NULLPTR) | |
| ~QFormLayout() | |
| void | addRow(QWidget *label, QWidget *field) |
| void | addRow(QWidget *label, QLayout *field) |
| void | addRow(const QString &labelText, QWidget *field) |
| void | addRow(const QString &labelText, QLayout *field) |
| void | addRow(QWidget *widget) |
| void | addRow(QLayout *layout) |
| FieldGrowthPolicy | fieldGrowthPolicy() const |
| Qt::Alignment | formAlignment() const |
| void | getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) const |
| void | getLayoutPosition(QLayout *layout, int *rowPtr, ItemRole *rolePtr) const |
| void | getWidgetPosition(QWidget *widget, int *rowPtr, ItemRole *rolePtr) const |
| int | horizontalSpacing() const |
| void | insertRow(int row, QWidget *label, QWidget *field) |
| void | insertRow(int row, QWidget *label, QLayout *field) |
| void | insertRow(int row, const QString &labelText, QWidget *field) |
| void | insertRow(int row, const QString &labelText, QLayout *field) |
| void | insertRow(int row, QWidget *widget) |
| void | insertRow(int row, QLayout *layout) |
| QLayoutItem * | itemAt(int row, ItemRole role) const |
| Qt::Alignment | labelAlignment() const |
| QWidget * | labelForField(QWidget *field) const |
| QWidget * | labelForField(QLayout *field) const |
| int | rowCount() const |
| RowWrapPolicy | rowWrapPolicy() const |
| void | setFieldGrowthPolicy(FieldGrowthPolicy policy) |
| void | setFormAlignment(Qt::Alignment alignment) |
| void | setHorizontalSpacing(int spacing) |
| void | setItem(int row, ItemRole role, QLayoutItem *item) |
| void | setLabelAlignment(Qt::Alignment alignment) |
| void | setLayout(int row, ItemRole role, QLayout *layout) |
| void | setRowWrapPolicy(RowWrapPolicy policy) |
| void | setSpacing(int spacing) |
| void | setVerticalSpacing(int spacing) |
| void | setWidget(int row, ItemRole role, QWidget *widget) |
| int | spacing() const |
| int | verticalSpacing() const |
Переопределенные открытые функции
| виртуальный void | addItem(QLayoutItem *item) |
| виртуальный int | count() const |
| виртуальный Qt::Orientations | expandingDirections() const |
| виртуальный bool | hasHeightForWidth() const |
| виртуальный int | heightForWidth(int width) const |
| виртуальный void | invalidate() |
| виртуальный QLayoutItem * | itemAt(int index) const |
| виртуальный QSize | minimumSize() const |
| виртуальный void | setGeometry(const QRect &rect) |
| виртуальный QSize | sizeHint() const |
| виртуальный QLayoutItem * | takeAt(int index) |
- 36 общедоступных функций, унаследованных от QLayout
- 31 общедоступных функций, унаследованных от QObject
- 17 общедоступных функций, унаследованных от QLayoutItem
Дополнительные унаследованные члены
- 1 общедоступный слот, унаследованный от QObject
- 2 сигналов, унаследованных от QObject
- 1 статический общедоступный член, унаследованный от QLayout
- 11 статических общедоступных членов, унаследованных от QObject
- 4 защищённых функций, унаследованных от QLayout
- 9 защищённых функций, унаследованных от QObject
Подробное описание
Класс QFormLayout управляет формами входных виджетов и их соответствующими метками.
QFormLayout — это класс макета по умолчанию, который выстраивает свои дочерние элементы в двух столбцах в формате формы. Левый столбец состоит из меток, а правый — из виджетов «полей» (полей ввода, спинбоксов и т. д.).
Традиционно такие макеты форм из двух столбцов создавались с помощью QGridLayout. QFormLayout — это альтернативный способ более высокого уровня, который предоставляет следующие преимущества:
-
Соответствие рекомендациям по внешнему виду разных платформ.
Например, руководства macOS Aqua и KDE предусматривают выравнивание меток справа, в то время как приложения Windows и GNOME обычно используют выравнивание слева.
-
Поддержка перевода длинных строк.
Для устройств с маленькими дисплеями QFormLayout может быть настроен на перенос длинных строк или даже на перенос всех строк.
-
Удобный 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) | QMacStyle | QPlastiqueStyle | Расширенные стили Qt |
|---|---|---|---|
| Традиционный стиль, используемый для Windows, GNOME и более ранних версий KDE. Метки выравниваются по левому краю, а поля расширяются для заполнения доступного пространства. (Это обычно соответствует тому, что мы получили бы, используя двухколоночный QGridLayout.) | Стиль, основанный на руководствах macOS Aqua. Метки выравниваются по правому краю, поля не расширяются за пределы своего размера, а форма центрируется по горизонтали. | Рекомендуемый стиль для приложений KDE. Похож на MacStyle, за исключением того, что форма выравнивается по левому краю, а все поля расширяются для заполнения доступного пространства. | Стиль по умолчанию для расширенных стилей Qt. Метки выравниваются по правому краю, расширяющиеся поля расширяются для заполнения доступного пространства, а перенос строк включен для длинных строк. |
Стиль формы также можно переопределить индивидуально, вызвав setLabelAlignment(), setFormAlignment(), setFieldGrowthPolicy() и setRowWrapPolicy(). Например, чтобы смоделировать внешний вид макета формы QMacStyle на всех платформах, но с метками, выровненными по левому краю, можно написать:
formLayout->setRowWrapPolicy(QFormLayout::DontWrapRows); formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint); formLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop); formLayout->setLabelAlignment(Qt::AlignLeft);
См. также QGridLayout, QBoxLayout и QStackedLayout.
Документация по типам членов
перечисление QFormLayout::FieldGrowthPolicy
Это перечисление определяет различные политики, которые могут использоваться для управления способом расширения полей формы.
| Константа | Значение | Описание |
|---|---|---|
QFormLayout::FieldsStayAtSizeHint |
0 |
Поля никогда не расширяются за пределы своего эффективного размера. Это значение по умолчанию для QMacStyle. |
QFormLayout::ExpandingFieldsGrow |
1 |
Поля с горизонтальной политикой размера Expanding или MinimumExpanding будут расширяться до заполнения доступного пространства. Другие поля не будут расширяться за пределы своего эффективного размера. Это политика по умолчанию для Plastique. |
QFormLayout::AllNonFixedFieldsGrow |
2 |
Все поля с политикой размера, позволяющей им расширяться, будут расширяться до заполнения доступного пространства. Это политика по умолчанию для большинства стилей. |
См. также fieldGrowthPolicy.
перечисление QFormLayout::ItemRole
Это перечисление определяет типы виджетов (или других элементов макета), которые могут появляться в строке.
| Константа | Значение | Описание |
|---|---|---|
QFormLayout::LabelRole |
0 |
Виджет метки. |
QFormLayout::FieldRole |
1 |
Виджет поля. |
QFormLayout::SpanningRole |
2 |
Виджет, занимающий столбцы меток и полей. |
См. также itemAt() и getItemPosition().
перечисление QFormLayout::RowWrapPolicy
Это перечисление определяет различные политики, которые могут использоваться для управления способом перевода строк формы.
| Константа | Значение | Описание |
|---|---|---|
QFormLayout::DontWrapRows |
0 |
Поля всегда размещаются рядом с их метками. Это политика по умолчанию для всех стилей, кроме расширенных стилей Qt. |
QFormLayout::WrapLongRows |
1 |
Меткам предоставляется достаточное горизонтальное пространство для размещения самых широких меток, а остальное пространство предоставляется полям. Если минимальный размер пары метка—поле шире доступного пространства, поле перемещается на следующую строку. Это политика по умолчанию для расширенных стилей Qt. |
QFormLayout::WrapAllRows |
2 |
Поля всегда размещаются ниже своей метки. |
См. также rowWrapPolicy.
Документация свойств
fieldGrowthPolicy : FieldGrowthPolicy
Это свойство определяет способ роста полей формы.
Значение по умолчанию зависит от виджета или стиля приложения. Для QMacStyle значение по умолчанию — FieldsStayAtSizeHint; для стилей, производных от QCommonStyle (например, Plastique и Windows), значение по умолчанию — ExpandingFieldsGrow; для стилей Qt Extended значение по умолчанию — AllNonFixedFieldsGrow.
Если ни одно из полей не может расти, и форма изменяет размер, дополнительное пространство распределяется в соответствии с текущим выравниванием формы.
Функции доступа:
| FieldGrowthPolicy | fieldGrowthPolicy() const |
| void | setFieldGrowthPolicy(FieldGrowthPolicy policy) |
См. также formAlignment и rowWrapPolicy.
formAlignment : Qt::Alignment
Это свойство определяет выравнивание содержимого макета формы внутри геометрии макета.
Значение по умолчанию зависит от виджета или стиля приложения. Для QMacStyle значение по умолчанию — Qt::AlignHCenter | Qt::AlignTop; для других стилей значение по умолчанию — Qt::AlignLeft | Qt::AlignTop.
Функции доступа:
| Qt::Alignment | formAlignment() const |
| void | setFormAlignment(Qt::Alignment alignment) |
См. также labelAlignment и rowWrapPolicy.
horizontalSpacing : int
Это свойство определяет интервал между виджетами, расположенными бок о бок.
По умолчанию, если значение не задано явно, горизонтальный интервал макета наследуется от родительского макета или из настроек стиля родительского виджета.
Функции доступа:
| int | horizontalSpacing() const |
| void | setHorizontalSpacing(int spacing) |
См. также verticalSpacing, QStyle::pixelMetric() и PM_LayoutHorizontalSpacing.
labelAlignment : Qt::Alignment
Это свойство определяет горизонтальное выравнивание меток.
Значение по умолчанию зависит от виджета или стиля приложения. Для стилей, производных от QCommonStyle, за исключением QPlastiqueStyle, значение по умолчанию — Qt::AlignLeft; для других стилей значение по умолчанию — Qt::AlignRight.
Функции доступа:
| Qt::Alignment | labelAlignment() const |
| void | setLabelAlignment(Qt::Alignment alignment) |
См. также formAlignment.
rowWrapPolicy : RowWrapPolicy
Это свойство определяет способ перехода строк формы.
Значение по умолчанию зависит от виджета или стиля приложения. Для стилей Qt Extended значение по умолчанию — WrapLongRows; для других стилей значение по умолчанию — DontWrapRows.
Если вы хотите отображать каждую метку над её соответствующим полем (вместо рядом), установите это свойство в WrapAllRows.
Функции доступа:
| RowWrapPolicy | rowWrapPolicy() const |
| void | setRowWrapPolicy(RowWrapPolicy policy) |
См. также fieldGrowthPolicy.
verticalSpacing : int
Это свойство определяет интервал между виджетами, расположенными вертикально.
По умолчанию, если значение не задано явно, вертикальный интервал макета наследуется от родительского макета или из настроек стиля родительского виджета.
Функции доступа:
| int | verticalSpacing() const |
| void | setVerticalSpacing(int spacing) |
См. также horizontalSpacing, QStyle::pixelMetric() и PM_LayoutHorizontalSpacing.
Документация по членам-функциям
QFormLayout::QFormLayout(QWidget *parent = Q_NULLPTR)
Создаёт новый макет формы с заданным виджетом parent.
См. также QWidget::setLayout().
QFormLayout::~QFormLayout()
Удаляет макет формы.
[virtual] void QFormLayout::addItem(QLayoutItem *item)
Переопределено из QLayout::addItem().
void QFormLayout::addRow(QWidget *label, QWidget *field)
Добавляет новую строку в конец этого макета формы с заданной меткой и полем.
См. также insertRow().
void QFormLayout::addRow(QWidget *label, QLayout *field)
Это перегруженная функция.
void QFormLayout::addRow(const QString &labelText, QWidget *field)
Это перегруженная функция.
Этот перегруз автоматически создаёт QLabel за кулисами с labelText в качестве текста. field устанавливается как новый QLabel's buddy.
void QFormLayout::addRow(const QString &labelText, QLayout *field)
Это перегруженная функция.
Этот перегруз автоматически создаёт QLabel за кулисами с labelText в качестве текста.
void QFormLayout::addRow(QWidget *widget)
Это перегруженная функция.
Добавляет указанный widget в конец этого макета формы. widget охватывает оба столбца.
void QFormLayout::addRow(QLayout *layout)
Это перегруженная функция.
Добавляет указанный layout в конец этого макета формы. layout охватывает оба столбца.
[virtual] int QFormLayout::count() const
Переопределено из QLayout::count().
[virtual] Qt::Orientations QFormLayout::expandingDirections() const
Переопределено из QLayoutItem::expandingDirections().
void QFormLayout::getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) const
Получает строку и роль (столбец) элемента по указанному индексу. Если индекс вне границ, *rowPtr устанавливается в -1; в противном случае строка сохраняется в *rowPtr, а роль — в *rolePtr.
См. также itemAt(), count(), getLayoutPosition() и getWidgetPosition().
void QFormLayout::getLayoutPosition(QLayout *layout, int *rowPtr, ItemRole *rolePtr) const
Извлекает строку и роль (столбец) указанного дочернего элемента макета. Если макет не имеет формы макета, *rowPtr устанавливается в -1; в противном случае строка сохраняется в *rowPtr, а роль — в *rolePtr.
void QFormLayout::getWidgetPosition(QWidget *widget, int *rowPtr, ItemRole *rolePtr) const
Извлекает строку и роль (столбец) указанного widget в макете. Если widget не содержится в макете, *rowPtr устанавливается в -1; в противном случае строка сохраняется в *rowPtr, а роль — в *rolePtr.
См. также getItemPosition() и itemAt().
[virtual] bool QFormLayout::hasHeightForWidth() const
Переопределено из QLayoutItem::hasHeightForWidth().
[virtual] int QFormLayout::heightForWidth(int width) const
Переопределено из QLayoutItem::heightForWidth().
void QFormLayout::insertRow(int row, QWidget *label, QWidget *field)
Вставляет новую строку в позицию row в этом макете формы с заданным label и field. Если row выходит за пределы допустимых значений, новая строка добавляется в конец.
См. также addRow().
void QFormLayout::insertRow(int row, QWidget *label, QLayout *field)
Это перегруженная функция.
void QFormLayout::insertRow(int row, const QString &labelText, QWidget *field)
Это перегруженная функция.
Этот перегруз автоматически создаёт QLabel за кулисами с labelText в качестве текста. field устанавливается в качестве нового QLabel's buddy.
void QFormLayout::insertRow(int row, const QString &labelText, QLayout *field)
Это перегруженная функция.
Этот перегруз автоматически создаёт QLabel за кулисами с labelText в качестве текста.
void QFormLayout::insertRow(int row, QWidget *widget)
Это перегруженная функция.
Вставляет указанный widget в позицию row в этом макете формы. widget занимает оба столбца. Если row выходит за пределы допустимых значений, виджет добавляется в конец.
void QFormLayout::insertRow(int row, QLayout *layout)
Это перегруженная функция.
Вставляет указанный макет в позицию row в этом макете формы. макет занимает оба столбца. Если row выходит за пределы допустимых значений, виджет добавляется в конец.
[virtual] void QFormLayout::invalidate()
Переопределено из QLayoutItem::invalidate().
QLayoutItem *QFormLayout::itemAt(int row, ItemRole role) const
Возвращает элемент макета в заданной строке с указанной ролью (столбцом). Возвращает 0, если такого элемента нет.
См. также QLayout::itemAt() и setItem().
[virtual] QLayoutItem *QFormLayout::itemAt(int index) const
Переопределено из QLayout::itemAt().
QWidget *QFormLayout::labelForField(QWidget *field) const
Возвращает метку, связанную с заданным field.
См. также itemAt().
QWidget *QFormLayout::labelForField(QLayout *field) const
Это перегруженная функция.
[virtual] QSize QFormLayout::minimumSize() const
Переопределено из QLayoutItem::minimumSize().
int QFormLayout::rowCount() const
Возвращает количество строк в форме.
См. также QLayout::count().
[virtual] void QFormLayout::setGeometry(const QRect &rect)
Переопределено из QLayoutItem::setGeometry().
void QFormLayout::setItem(int row, ItemRole role, QLayoutItem *item)
Устанавливает элемент в заданной строке для заданной роли в item, расширяя макет пустыми строками при необходимости.
Если ячейка уже занята, item не вставляется, и сообщение об ошибке отправляется в консоль. item занимает оба столбца.
Предупреждение: Не используйте эту функцию для добавления дочерних макетов или дочерних элементов виджетов. Используйте setLayout() или setWidget() вместо этого.
См. также setLayout().
void QFormLayout::setLayout(int row, ItemRole role, QLayout *layout)
Устанавливает подмакет в заданной строке для заданной роли в layout, расширяя макет формы пустыми строками при необходимости.
Если ячейка уже занята, layout не вставляется, и сообщение об ошибке отправляется в консоль.
Примечание: Для большинства приложений следует использовать addRow() или insertRow() вместо setLayout().
См. также setWidget().
void QFormLayout::setSpacing(int spacing)
Эта функция устанавливает вертикальный и горизонтальный отступы в spacing.
См. также spacing(), setVerticalSpacing() и setHorizontalSpacing().
void QFormLayout::setWidget(int row, ItemRole role, QWidget *widget)
Устанавливает виджет в заданной строке для заданной роли в widget, расширяя макет пустыми строками при необходимости.
Если ячейка уже занята, widget не вставляется, и сообщение об ошибке отправляется в консоль.
Примечание: Для большинства приложений следует использовать addRow() или insertRow() вместо setWidget().
См. также setLayout().
[virtual] QSize QFormLayout::sizeHint() const
Переопределено из QLayoutItem::sizeHint().
int QFormLayout::spacing() const
Если вертикальный отступ равен горизонтальному отступу, эта функция возвращает это значение; в противном случае она возвращает -1.
См. также setSpacing(), verticalSpacing() и horizontalSpacing().
[virtual] QLayoutItem *QFormLayout::takeAt(int index)
Переопределено из QLayout::takeAt().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qformlayout.html