Класс QSplitter
Класс QSplitter реализует виджет-разделитель. Подробнее...
| Заголовок: | #include <QSplitter> |
| qmake: | QT += widgets |
| Наследует: | QFrame |
Свойства
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
- 6 свойств унаследовано от QFrame
- 59 свойств унаследовано от QWidget
- 1 свойство унаследовано от QObject
Открытые функции
| QSplitter(QWidget *parent = nullptr) | |
| QSplitter(Qt::Orientation orientation, 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 |
- 14 открытых функций унаследовано от QFrame
- 214 открытых функций унаследовано от QWidget
- 34 открытых функций унаследовано от QObject
- 14 открытых функций унаследовано от QPaintDevice
Сигналы
| 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 |
- 4 защищенных функции унаследовано от QFrame
- 35 защищенных функций унаследовано от QWidget
- 9 защищенных функций унаследовано от QObject
- 1 защищенная функция унаследовано от QPaintDevice
Дополнительные унаследованные члены
- 19 слотов-функций унаследовано от QWidget
- 1 слот-функция унаследовано от QObject
- 1 открытая переменная унаследована от QObject
- 5 статических открытых членов унаследовано от QWidget
- 10 статических открытых членов унаследовано от QObject
- 1 защищенный слот унаследовано от QWidget
- 2 защищенные переменные унаследовано от QObject
- 1 защищенный тип унаследовано от QPaintDevice
Подробное описание
Класс QSplitter реализует виджет-разделитель.
Разделитель позволяет пользователю управлять размером дочерних виджетов, перетаскивая границу между ними. Любое количество виджетов может быть контролируемо одним разделителем. Типичное использование 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() вместо этого (см. пример выше).
См. также 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
Это свойство указывает, является ли изменение размера непрозрачным.
Поведение изменения размера по умолчанию зависит от стиля (определяется подсказкой стиля 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(QWidget *parent = nullptr)
Создает горизонтальный разделитель с аргументом parent, переданным конструктору QFrame.
См. также setOrientation().
QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
Создает разделитель с заданной orientation и parent.
См. также setOrientation().
[virtual] QSplitter::~QSplitter()
Удаляет разделитель. Все дочерние элементы удаляются.
void QSplitter::addWidget(QWidget *widget)
Добавляет данный widget в макет разделителя после всех других элементов.
Если widget уже находится в разделителе, он будет перемещен в новое положение.
Примечание: Разделитель принимает владение виджетом.
См. также insertWidget(), widget() и indexOf().
[override virtual protected] void QSplitter::changeEvent(QEvent *ev)
Переопределено из QFrame::changeEvent().
[override virtual protected] void QSplitter::childEvent(QChildEvent *c)
Переопределено из QObject::childEvent().
Сообщает разделителю, что дочерний виджет, описанный c, был вставлен или удален.
Этот метод также используется для обработки ситуации, когда виджет создается с разделителем в качестве родителя, но не добавляется явно с помощью insertWidget() или addWidget(). Это делается для совместимости и не является рекомендуемым способом размещения виджетов в разделителе в новом коде. Пожалуйста, используйте insertWidget() или addWidget() в новом коде.
См. также addWidget() и insertWidget().
[protected] int QSplitter::closestLegalPosition(int pos, int index)
Возвращает ближайшее допустимое положение к pos виджета в index.
Для языков с письмом справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертирован. Позиции затем измеряются от правого края виджета.
См. также getRange().
int QSplitter::count() const
Возвращает количество виджетов, содержащихся в макете разделителя.
См. также widget() и handle().
[virtual protected] QSplitterHandle *QSplitter::createHandle()
Возвращает новый разделитель как дочерний виджет этого разделителя. Эта функция может быть переопределена в подклассах для поддержки пользовательских разделителей.
См. также handle() и indexOf().
[override virtual protected] bool QSplitter::event(QEvent *e)
Переопределено из QFrame::event().
void QSplitter::getRange(int index, int *min, int *max) const
Возвращает допустимый диапазон разделителя в index в *min и *max, если min и max не равны 0.
QSplitterHandle *QSplitter::handle(int index) const
Возвращает разделитель слева (или сверху) от элемента в макете разделителя по заданному index, или nullptr если такого элемента нет. Разделитель с индексом 0 всегда скрыт.
Для языков с письмом справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертирован. Разделитель будет справа от виджета по index.
См. также count(), widget(), indexOf(), createHandle() и setHandleWidth().
int QSplitter::indexOf(QWidget *widget) const
Возвращает индекс в макете разделителя указанного widget, или -1, если widget не найден. Это также работает для ручек.
Ручки пронумерованы с 0. Ручек столько же, сколько и дочерних виджетов, но ручка в позиции 0 всегда скрыта.
void QSplitter::insertWidget(int index, QWidget *widget)
Вставляет указанный widget в макет разделителя по заданному index.
Если widget уже находится в разделителе, он будет перемещен в новую позицию.
Если index является недопустимым индексом, то виджет будет вставлен в конец.
Примечание: Разделитель принимает владение виджетом.
См. также addWidget(), indexOf() и widget().
bool QSplitter::isCollapsible(int index) const
Возвращает true , если виджет по index можно сворачивать, в противном случае возвращает 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 получает переназначение в разделитель, его геометрия может не быть установлена сразу, а только после того, как widget получит соответствующие события.
Функция была добавлена в Qt 5.9.
См. также insertWidget() и indexOf().
[override virtual protected] void QSplitter::resizeEvent(QResizeEvent *)
Переопределено из QWidget::resizeEvent().
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().
QList<int> QSplitter::sizes() const
Возвращает список параметров размера всех виджетов в этом разделителе.
Если ориентация разделителя горизонтальная, список содержит ширину виджетов в пикселях, слева направо; если ориентация вертикальная, список содержит высоты виджетов в пикселях, сверху вниз.
Передача значений в функцию setSizes() другого разделителя создаст разделитель с таким же макетом, как и этот.
Обратите внимание, что невидимые виджеты имеют размер 0.
См. также setSizes().
[signal] void QSplitter::splitterMoved(int pos, int index)
Этот сигнал испускается, когда ручка разделителя по определённому index была перемещена в позицию pos.
Для языков с направлением справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертирован. Тогда pos — расстояние от правого края виджета.
См. также moveSplitter().
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/archives/qt-5.11/qsplitter.html