Класс QSplitter
Класс QSplitter реализует виджет разделителя. Подробнее...
| Заголовок: | #include <QSplitter> |
| qmake: | QT += widgets |
| Наследует: | QFrame |
Свойства
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
Открытые функции
| QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr) | |
| QSplitter(QWidget *parent = nullptr) | |
| virtual | ~QSplitter() |
| void | addWidget(QWidget *widget) |
| bool | childrenCollapsible() const |
| int | count() const |
| void | getRange(int index, int *min, int *max) const |
| QSplitterHandle * | handle(int index) const |
| int | handleWidth() const |
| int | indexOf(QWidget *widget) const |
| void | insertWidget(int index, QWidget *widget) |
| bool | isCollapsible(int index) const |
| bool | opaqueResize() const |
| Qt::Orientation | orientation() const |
| void | refresh() |
| QWidget * | replaceWidget(int index, QWidget *widget) |
| bool | restoreState(const QByteArray &state) |
| QByteArray | saveState() const |
| void | setChildrenCollapsible(bool) |
| void | setCollapsible(int index, bool collapse) |
| void | setHandleWidth(int) |
| void | setOpaqueResize(bool opaque = true) |
| void | setOrientation(Qt::Orientation) |
| void | setSizes(const QList<int> &list) |
| void | setStretchFactor(int index, int stretch) |
| QList<int> | sizes() const |
| QWidget * | widget(int index) const |
Переопределенные открытые функции
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
Сигналы
| void | splitterMoved(int pos, int index) |
Защищенные функции
| int | closestLegalPosition(int pos, int index) |
| virtual QSplitterHandle * | createHandle() |
| void | moveSplitter(int pos, int index) |
| void | setRubberBand(int pos) |
Переопределённые защищённые функции
| virtual void | changeEvent(QEvent *ev) override |
| virtual void | childEvent(QChildEvent *c) override |
| virtual bool | event(QEvent *e) override |
| virtual void | resizeEvent(QResizeEvent *) override |
Подробное описание
Разделитель позволяет пользователю управлять размером дочерних виджетов, перетаскивая границу между ними. Любое количество виджетов может быть управляемо с помощью одного разделителя. Типичное использование QSplitter заключается в создании нескольких виджетов и добавлении их с помощью insertWidget() или addWidget().
Следующий пример покажет QListView, QTreeView и QTextEdit рядом, с двумя ручками разделителя:
QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit); Если виджет уже находится внутри QSplitter, когда вызывается insertWidget() или addWidget(), он будет перемещен в новое положение. Это можно использовать для изменения порядка виджетов в разделителе позже. Вы можете использовать indexOf(), widget() и count() для доступа к виджетам внутри разделителя.
По умолчанию QSplitter выравнивает свои дочерние виджеты горизонтально (рядом); вы можете использовать setOrientation(Qt::Vertical), чтобы выровнять их вертикально.
По умолчанию все виджеты могут быть так велики или малы, как пожелает пользователь, между minimumSizeHint() (или minimumSize()) и maximumSize() виджетов.
QSplitter по умолчанию динамически изменяет размер своих дочерних элементов. Если вы хотите, чтобы QSplitter изменял размер дочерних элементов только в конце операции изменения размера, вызовите setOpaqueResize(false).
Первоначальное распределение размера между виджетами определяется умножением начального размера на коэффициент растяжения. Вы также можете использовать setSizes() для задания размеров всех виджетов. Функция sizes() возвращает размеры, заданные пользователем. В качестве альтернативы, вы можете сохранить и восстановить размеры виджетов из QByteArray с помощью saveState() и restoreState() соответственно.
Когда вы hide() дочерний элемент, его пространство будет распределено среди других дочерних элементов. Оно будет восстановлено, когда вы show() его снова.
Примечание: Добавление QLayout в QSplitter не поддерживается (ни через setLayout(), ни путём назначения QSplitter в качестве родительского объекта QLayout); используйте addWidget() вместо этого (см. пример выше).
END_OF_DOCUMENT_MARKERСм. также QSplitterHandle, QHBoxLayout, QVBoxLayout и QTabWidget.
Документация свойств
childrenCollapsible : bool
Это свойство указывает, могут ли дочерние виджеты быть уменьшены пользователем до размера 0.
По умолчанию, дочерние виджеты могут быть уменьшены. Можно включить или отключить уменьшение отдельных дочерних виджетов, используя setCollapsible().
Функции доступа:
| bool | childrenCollapsible() const |
| void | setChildrenCollapsible(bool) |
См. также setCollapsible().
handleWidth : int
Это свойство содержит ширину разделителей.
По умолчанию, это свойство содержит значение, зависящее от платформы пользователя и его предпочтений стиля.
Если вы установите handleWidth в 1 или 0, фактическая область захвата будет расширена, чтобы перекрывать несколько пикселей соответствующих виджетов.
Функции доступа:
| int | handleWidth() const |
| void | setHandleWidth(int) |
opaqueResize : bool
Возвращает true если виджеты изменяются динамически (непрозрачно) при интерактивном перемещении разделителя. В противном случае возвращает false.
Поведение по умолчанию зависит от стиля (определяется подсказкой стиля SH_Splitter_OpaqueResize). Однако вы можете переопределить его, вызвав setOpaqueResize().
Функции доступа:
| bool | opaqueResize() const |
| void | setOpaqueResize(bool opaque = true) |
См. также QStyle::StyleHint.
orientation : Qt::Orientation
Это свойство содержит ориентацию разделителя.
По умолчанию, ориентация горизонтальная (то есть виджеты расположены рядом). Возможные ориентации: Qt::Horizontal и Qt::Vertical.
Функции доступа:
| Qt::Orientation | orientation() const |
| void | setOrientation(Qt::Orientation) |
См. также QSplitterHandle::orientation().
Документация по функциям-членам
QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
Конструирует разделитель с заданной ориентацией и родительским элементом.
См. также setOrientation().
QSplitter::QSplitter(QWidget *parent = nullptr)
Конструирует горизонтальный разделитель, передавая аргумент родительский конструктору QFrame.
См. также setOrientation().
[signal] void QSplitter::splitterMoved(int pos, int index)
Этот сигнал излучается, когда разделитель в определённом индексе был перемещён в позицию pos.
Для языков с письмом справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертируется. Тогда pos — расстояние от правого края виджета.
См. также moveSplitter().
[virtual] QSplitter::~QSplitter()
Уничтожает разделитель. Все дочерние элементы удаляются.
void QSplitter::addWidget(QWidget *widget)
Добавляет заданный widget в макет разделителя после всех других элементов.
Если widget уже находится в разделителе, он будет перемещён в новое положение.
Примечание: разделитель берёт на себя владение виджетом.
См. также insertWidget(), widget() и indexOf().
[override virtual protected] void QSplitter::changeEvent(QEvent *ev)
Переопределяет: QFrame::changeEvent(QEvent *ev).
[override virtual protected] void QSplitter::childEvent(QChildEvent *c)
Переопределяет: QObject::childEvent(QChildEvent *event).
Сообщает разделителю, что дочерний виджет, описанный в c, был вставлен или удалён.
Этот метод также используется для обработки ситуации, когда виджет создаётся с разделителем как родителем, но не добавляется явно с помощью insertWidget() или addWidget(). Это для совместимости, и не рекомендуется использовать в новом коде. Пожалуйста, используйте insertWidget() или addWidget() в новом коде.
См. также addWidget() и insertWidget().
[protected] int QSplitter::closestLegalPosition(int pos, int index)
Возвращает ближайшую допустимую позицию к pos для виджета в индексе.
Для языков с письмом справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертируется. Позиции измеряются от правого края виджета.
См. также getRange().
int QSplitter::count() const
Возвращает количество виджетов, содержащихся в макете разделителя.
См. также widget() и handle().
[virtual protected] QSplitterHandle *QSplitter::createHandle()
Возвращает новый разделитель как дочерний виджет этого разделителя. Эта функция может быть переопределена в подклассах для поддержки пользовательских разделителей.
См. также handle() и indexOf().
[override virtual protected] bool QSplitter::event(QEvent *e)
Переопределяет: QFrame::event(QEvent *e).
void QSplitter::getRange(int index, int *min, int *max) const
Возвращает допустимый диапазон разделителя в индексе в *min и *max, если min и max не равны 0.
QSplitterHandle *QSplitter::handle(int index) const
Возвращает разделитель слева (или сверху) от элемента в макете разделителя по заданному индексу или nullptr если такого элемента нет. Разделитель в индексе 0 всегда скрыт.
Для языков с письмом справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертируется. Разделитель будет справа от виджета в индексе.
См. также count(), widget(), indexOf(), createHandle() и setHandleWidth().
int QSplitter::indexOf(QWidget *widget) const
Возвращает индекс заданного widget в макете разделителя или -1, если widget не найден. Это также работает для разделителей.
Разделители пронумерованы с 0. Разделителей столько же, сколько и дочерних виджетов, но разделитель в позиции 0 всегда скрыт.
void QSplitter::insertWidget(int index, QWidget *widget)
Вставляет заданный widget в макет разделителя в заданном индексе.
Если widget уже находится в разделителе, он будет перемещён в новое положение.
Если индекс недействителен, виджет будет вставлен в конец.
Примечание: разделитель берёт на себя владение виджетом.
См. также addWidget(), indexOf() и widget().
bool QSplitter::isCollapsible(int index) const
Возвращает true если виджет в индексе можно уменьшить, в противном случае возвращает false.
[override virtual] QSize QSplitter::minimumSizeHint() const
Реализует функцию доступа к свойству: QWidget::minimumSizeHint.
[protected] void QSplitter::moveSplitter(int pos, int index)
Перемещает левую или верхнюю границу разделителя в позиции index как можно ближе к позиции pos, которая является расстоянием от левой или верхней границы виджета.
Для языков с направлением письма справа налево, таких как арабский и иврит, расположение горизонтальных разделителей инвертируется. В этом случае pos является расстоянием от правой границы виджета.
См. также splitterMoved(), closestLegalPosition() и getRange().
void QSplitter::refresh()
Обновляет состояние разделителя. Вам обычно не нужно вызывать эту функцию.
QWidget *QSplitter::replaceWidget(int index, QWidget *widget)
Заменяет виджет в макете разделителя в позиции index на widget.
Возвращает виджет, который был только что заменён, если index корректный и widget не является дочерним элементом разделителя. В противном случае возвращает null и замена или добавление не выполняются.
Геометрия вновь вставленного виджета будет такой же, как у заменяемого виджета. Его видимое и свёрнутое состояние также наследуется.
Примечание: Разделитель берёт на себя владение widget и устанавливает родителя заменённого виджета в null.
Примечание: Поскольку widget переназначается родительскому элементу разделителя, его geometry может быть установлен не сразу, а только после того, как widget получит соответствующие события.
Функция была добавлена в Qt 5.9.
См. также insertWidget() и indexOf().
[override virtual protected] void QSplitter::resizeEvent(QResizeEvent *)
Переопределяет: QWidget::resizeEvent(QResizeEvent *event).
bool QSplitter::restoreState(const QByteArray &state)
Восстанавливает макет разделителя по состоянию, указанному в state. Возвращает true если состояние восстановлено; в противном случае возвращает false.
Обычно используется совместно с QSettings для восстановления размера из предыдущей сессии. Вот пример:
Восстановление состояния разделителя:
QSettings settings;
splitter->restoreState(settings.value("splitterSizes").toByteArray()); Невозможность восстановления макета разделителя может быть вызвана некорректными или устаревшими данными в предоставленном массиве байтов.
См. также saveState().
QByteArray QSplitter::saveState() const
Сохраняет состояние макета разделителя.
Обычно используется совместно с QSettings для сохранения размера для будущей сессии. Номер версии хранится в данных. Вот пример:
QSettings settings;
settings.setValue("splitterSizes", splitter->saveState()); См. также restoreState().
void QSplitter::setCollapsible(int index, bool collapse)
Устанавливает возможность сворачивания дочернего виджета в позиции index в значение collapse.
По умолчанию дочерние виджеты могут быть свёрнуты, что означает, что пользователь может уменьшить их размер до 0, даже если у них есть ненулевой minimumSize() или minimumSizeHint(). Это поведение можно изменить для каждого виджета, вызвав эту функцию, или глобально для всех виджетов в разделителе, установив свойство childrenCollapsible.
См. также isCollapsible() и childrenCollapsible.
[protected] void QSplitter::setRubberBand(int pos)
Отображает резиновую полоску в позиции pos. Если pos отрицательное, резиновая полоска удаляется.
void QSplitter::setSizes(const QList<int> &list)
Устанавливает размеры дочерних виджетов в соответствии со значениями, заданными в списке list.
Если разделитель горизонтальный, значения устанавливают ширину каждого виджета в пикселях слева направо. Если разделитель вертикальный, устанавливается высота каждого виджета сверху вниз.
Дополнительные значения в списке list игнорируются. Если list содержит слишком мало значений, результат неопределён, но программа будет работать корректно.
Общий размер виджета-разделителя не изменяется. Вместо этого любое дополнительное/отсутствующее пространство распределяется между виджетами в соответствии с относительным весом размеров.
Если вы задаёте размер 0, виджет будет невидимым. Политики размеров виджетов сохраняются. То есть значение, меньшее минимального размера подсказки соответствующего виджета, будет заменено значением подсказки.
См. также sizes().
void QSplitter::setStretchFactor(int index, int stretch)
Обновляет политику размеров виджета в позиции index, установив коэффициент растяжения stretch.
stretch не является эффективным коэффициентом растяжения; эффективный коэффициент растяжения вычисляется путём взятия начального размера виджета и умножения его на stretch.
Эта функция предоставляется для удобства. Она эквивалентна
QWidget *widget = splitter->widget(index); QSizePolicy policy = widget->sizePolicy(); policy.setHorizontalStretch(stretch); policy.setVerticalStretch(stretch); widget->setSizePolicy(policy);
См. также setSizes() и widget().
[override virtual] QSize QSplitter::sizeHint() const
Переопределяет: QFrame::sizeHint() const.
QList<int> QSplitter::sizes() const
Возвращает список параметров размеров всех виджетов в этом разделителе.
Если ориентация разделителя горизонтальная, список содержит ширину виджетов в пикселях слева направо; если ориентация вертикальная, список содержит высоты виджетов в пикселях сверху вниз.
Передача значений в функцию setSizes() другого разделителя создаст разделитель с таким же макетом, как и этот.
Обратите внимание, что невидимые виджеты имеют размер 0.
См. также setSizes().
QWidget *QSplitter::widget(int index) const
Возвращает виджет в позиции index в макете разделителя или nullptr если такого виджета нет.
См. также count(), handle(), indexOf() и insertWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qsplitter.html