Класс 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 = Q_NULLPTR) | |
| QSplitter(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR) | |
| ~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 |
| virtual QSize | sizeHint() const |
- 14 открытых функций унаследовано от QFrame
- 214 открытых функций унаследовано от QWidget
- 32 открытых функции унаследовано от 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) |
| virtual void | childEvent(QChildEvent *c) |
| virtual bool | event(QEvent *e) |
| virtual void | resizeEvent(QResizeEvent *) |
- 4 защищённых функции унаследовано от QFrame
- 35 защищённых функций унаследовано от QWidget
- 9 защищённых функций унаследовано от QObject
- 1 защищённая функция унаследовано от QPaintDevice
Дополнительные унаследованные члены
- 19 открытых слотов унаследовано от QWidget
- 1 открытый слот унаследовано от QObject
- 5 статических открытых членов унаследовано от QWidget
- 11 статических открытых членов унаследовано от QObject
- 1 защищённый слот унаследовано от QWidget
Подробное описание
Класс 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 = Q_NULLPTR)
Создаёт горизонтальный разделитель с аргументом parent, переданным конструктору QFrame.
См. также setOrientation().
QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR)
Создаёт разделитель с заданной ориентацией и родительским элементом.
См. также setOrientation().
QSplitter::~QSplitter()
Удаляет разделитель. Все дочерние элементы удаляются.
void QSplitter::addWidget(QWidget *widget)
Добавляет указанный виджет в макет разделителя после всех других элементов.
Если widget уже находится в разделителе, он будет перемещён в новое положение.
Примечание: Разделитель берёт на себя владение виджетом.
См. также insertWidget(), widget() и indexOf().
void QSplitter::changeEvent(QEvent *ev)
Переопределено из QWidget::changeEvent().
void QSplitter::childEvent(QChildEvent *c)
Переопределено из QObject::childEvent().
Сообщает разделителю, что дочерний виджет, описанный c, был вставлен или удалён.
Этот метод также используется для обработки ситуации, когда виджет создаётся с разделителем в качестве родительского элемента, но не добавляется явно с помощью insertWidget() или addWidget(). Это делается для совместимости и не является рекомендуемым способом добавления виджетов в разделитель в новом коде. В новом коде, пожалуйста, используйте insertWidget() или addWidget().
См. также addWidget() и insertWidget().
int QSplitter::closestLegalPosition(int pos, int index)
Возвращает ближайшее допустимое положение к pos для виджета по индексу.
Для языков с направлением письма справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертируется. Положения затем измеряются от правого края виджета.
См. также getRange().
int QSplitter::count() const
Возвращает количество виджетов, содержащихся в макете разделителя.
См. также widget() и handle().
QSplitterHandle *QSplitter::createHandle()
Возвращает новую ручку разделителя как дочерний виджет этого разделителя. Этот метод может быть переопределён в подклассах для поддержки настраиваемых ручек.
См. также handle() и indexOf().
bool QSplitter::event(QEvent *e)
Переопределено из QObject::event().
void QSplitter::getRange(int index, int *min, int *max) const
Возвращает допустимый диапазон разделителя по индексу в *min и *max, если min и max не равны 0.
QSplitterHandle *QSplitter::handle(int index) const
Возвращает ручку слева (или сверху) для элемента в макете разделителя по заданному индексу. Ручка по индексу 0 всегда скрыта.
Для языков с направлением письма справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертируется. Ручка будет справа от виджета по индексу.
См. также count(), widget(), indexOf(), createHandle() и setHandleWidth().
int QSplitter::indexOf(QWidget *widget) const
Возвращает индекс в макете разделителя указанного виджета. Это также работает для ручек.
Ручки нумеруются с 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.
[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().
[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().
[virtual] QSize QSplitter::sizeHint() const
Переопределено из QWidget::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 в макете разделителя.
См. также count(), handle(), indexOf() и insertWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qsplitter.html