Класс QFormLayout
Класс QFormLayout управляет формами входных виджетов и их связанных меток. Подробнее...
| Заголовок: | #include <QFormLayout> |
| qmake: | QT += widgets |
| С тех пор: | Qt 4.4 |
| Наследует: | QLayout |
Открытые типы
| класс | TakeRowResult |
| перечисление | FieldGrowthPolicy { FieldsStayAtSizeHint, ExpandingFieldsGrow, AllNonFixedFieldsGrow } |
| перечисление | ItemRole { LabelRole, FieldRole, SpanningRole } |
| перечисление | 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 |
Реализованные публичные функции
| virtual void | addItem(QLayoutItem *item) |
| virtual int | count() const |
| virtual Qt::Orientations | expandingDirections() const |
| virtual bool | hasHeightForWidth() const |
| virtual int | heightForWidth(int width) const |
| virtual void | invalidate() |
| virtual QLayoutItem * | itemAt(int index) const |
| virtual QSize | minimumSize() const |
| virtual void | setGeometry(const QRect &rect) |
| virtual QSize | sizeHint() const |
| virtual QLayoutItem * | takeAt(int index) |
- 36 публичных функций унаследованных от QLayout
- 32 публичных функций унаследованных от 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 устанавливается как buddy нового QLabel.
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
Возвращает строку и роль (столбец) указанного дочернего элемента layout. Если layout не имеет вида макета, то *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)
Это перегруженный метод.
Вставляет указанный layout в позицию row в этом макете формы. layout занимает оба столбца. Если row находится вне границ, виджет добавляется в конец.
[virtual] void QFormLayout::invalidate()
Переопределено из QLayoutItem::invalidate().
QLayoutItem *QFormLayout::itemAt(int row, ItemRole role) const
Возвращает элемент макета в заданной row с указанной role (столбцом). Возвращает 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().
void QFormLayout::removeRow(int row)
Удаляет строку row из этого макета формы.
row должно быть неотрицательным и меньше rowCount().
После этого вызова rowCount() уменьшается на единицу. Все виджеты и вложенные макеты, занимавшие эту строку, удаляются. Это включает как виджет(ы) поля, так и метку, если таковая есть. Все последующие строки сдвигаются вверх на одну строку, и освобожденное вертикальное пространство перераспределяется между оставшимися строками.
Вы можете использовать эту функцию для отмены предыдущего addRow() или insertRow():
QFormLayout *flay = ...; QPointer<QLineEdit> le = new QLineEdit; flay->insertRow(2, "User:", le); // later: flay->removeRow(2); // le == nullptr at this point
Если вы хотите удалить строку из макета, не удаляя виджеты, используйте takeRow() вместо этого.
Эта функция была добавлена в Qt 5.8.
См. также takeRow().
void QFormLayout::removeRow(QWidget *widget)
Это перегруженный метод.
Удаляет строку, соответствующую widget, из этого макета формы.
После этого вызова rowCount() уменьшается на единицу. Все виджеты и вложенные макеты, занимавшие эту строку, удаляются. Это включает как виджет(ы) поля, так и метку, если таковая есть. Все последующие строки сдвигаются вверх на одну строку, и освобожденное вертикальное пространство перераспределяется между оставшимися строками.
Вы можете использовать эту функцию для отмены предыдущего addRow() или insertRow():
QFormLayout *flay = ...; QPointer<QLineEdit> le = new QLineEdit; flay->insertRow(2, "User:", le); // later: flay->removeRow(le); // le == nullptr at this point
Если вы хотите удалить строку из макета, не удаляя виджеты, используйте takeRow() вместо этого.
Эта функция была добавлена в Qt 5.8.
См. также takeRow().
void QFormLayout::removeRow(QLayout *layout)
Это перегруженный метод.
Удаляет строку, соответствующую layout, из этого макета формы.
После этого вызова rowCount() уменьшается на единицу. Все виджеты и вложенные макеты, занимавшие эту строку, удаляются. Это включает как виджет(ы) поля, так и метку, если таковая есть. Все последующие строки сдвигаются вверх на одну строку, и освобожденное вертикальное пространство перераспределяется между оставшимися строками.
Вы можете использовать эту функцию для отмены предыдущего addRow() или insertRow():
QFormLayout *flay = ...; QPointer<QVBoxLayout> vbl = new QVBoxLayout; flay->insertRow(2, "User:", vbl); // later: flay->removeRow(layout); // vbl == nullptr at this point
Если вы хотите удалить строку из макета формы, не удаляя вставленный макет, используйте takeRow() вместо этого.
Эта функция была добавлена в Qt 5.8.
См. также takeRow().
int QFormLayout::rowCount() const
Возвращает количество строк в форме.
См. также QLayout::count().
[virtual] void QFormLayout::setGeometry(const QRect &rect)
Переопределено из QLayoutItem::setGeometry().
void QFormLayout::setItem(int row, ItemRole role, QLayoutItem *item)
Устанавливает элемент в заданной row для данной role в item, расширяя макет пустыми строками при необходимости.
Если ячейка уже занята, item не вставляется, а сообщение об ошибке отправляется в консоль. item занимает оба столбца.
Предупреждение: Не используйте эту функцию для добавления дочерних макетов или элементов дочерних виджетов. Используйте setLayout() или setWidget() вместо этого.
См. также setLayout().
void QFormLayout::setLayout(int row, ItemRole role, QLayout *layout)
Устанавливает под-макет в заданной row для данной role в layout, расширяя макет формы пустыми строками при необходимости.
Если ячейка уже занята, layout не вставляется, а сообщение об ошибке отправляется в консоль.
Примечание: Для большинства приложений вместо setLayout() следует использовать addRow() или insertRow().
См. также setWidget().
void QFormLayout::setSpacing(int spacing)
Эта функция устанавливает вертикальный и горизонтальный отступ в значение spacing.
См. также spacing(), setVerticalSpacing(), и setHorizontalSpacing().
void QFormLayout::setWidget(int row, ItemRole role, QWidget *widget)
Устанавливает виджет в заданной строке row для заданного role на 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().
TakeRowResult QFormLayout::takeRow(int row)
Удаляет указанную строку row из этого макета формы.
row должно быть неотрицательным и меньше rowCount().
Примечание: Эта функция ничего не удаляет.
После этого вызова rowCount() уменьшается на единицу. Все последующие строки сдвигаются вверх на одну строку, и освободившееся вертикальное пространство перераспределяется между оставшимися строками.
Вы можете использовать эту функцию для отмены предыдущего addRow() или insertRow():
QFormLayout *flay = ...; QPointer<QLineEdit> le = new QLineEdit; flay->insertRow(2, "User:", le); // later: QFormLayout::TakeRowResult result = flay->takeRow(2);
Если вы хотите удалить строку из макета и удалить виджеты, используйте removeRow() вместо этого.
Возвращает Структуру, содержащую как виджет, так и соответствующие элементы макета метки.
Эта функция была добавлена в Qt 5.8.
См. также removeRow().
TakeRowResult QFormLayout::takeRow(QWidget *widget)
Это перегруженная функция.
Удаляет указанный widget из этого макета формы.
Примечание: Эта функция ничего не удаляет.
После этого вызова rowCount() уменьшается на единицу. Все последующие строки сдвигаются вверх на одну строку, и освободившееся вертикальное пространство перераспределяется между оставшимися строками.
QFormLayout *flay = ...; QPointer<QLineEdit> le = new QLineEdit; flay->insertRow(2, "User:", le); // later: QFormLayout::TakeRowResult result = flay->takeRow(widget);
Если вы хотите удалить строку из макета и удалить виджеты, используйте removeRow() вместо этого.
Возвращает Структуру, содержащую как виджет, так и соответствующие элементы макета метки.
Эта функция была добавлена в Qt 5.8.
См. также removeRow().
TakeRowResult QFormLayout::takeRow(QLayout *layout)
Это перегруженная функция.
Удаляет указанный layout из этого макета формы.
Примечание: Эта функция ничего не удаляет.
После этого вызова rowCount() уменьшается на единицу. Все последующие строки сдвигаются вверх на одну строку, и освободившееся вертикальное пространство перераспределяется между оставшимися строками.
QFormLayout *flay = ...; QPointer<QVBoxLayout> vbl = new QVBoxLayout; flay->insertRow(2, "User:", vbl); // later: QFormLayout::TakeRowResult result = flay->takeRow(widget);
Если вы хотите удалить строку из макета формы и удалить вставленный макет, используйте removeRow() вместо этого.
Возвращает Структуру, содержащую как виджет, так и соответствующие элементы макета метки.
Эта функция была добавлена в Qt 5.8.
См. также removeRow().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qformlayout.html