Класс QSplitter
Класс QSplitter реализует виджет-разделитель. Подробнее...
| Заголовок: | #include <QSplitter> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| 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() вместо этого (см. пример выше).
См. также 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 , если виджет в позиции 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()
Обновляет состояние разделителя. Вам, как правило, не нужно вызывать эту функцию.
[since 5.9] 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(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-6.2/qsplitter.html