Класс QSplitter
Класс QSplitter реализует виджет-разделитель. Подробнее...
| Заголовок: | #include <QSplitter> |
| qmake: | QT += widgets |
| Наследуется от: | QFrame |
Свойства
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
- 6 свойств унаследовано от QFrame
- 58 свойств унаследовано от 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() |
| 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
- 211 открытых функций унаследовано от QWidget
- 31 открытых функций унаследовано от 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)
Конструирует разделитель с заданной orientation и parent.
См. также setOrientation().
QSplitter::~QSplitter()
Уничтожает разделитель. Все дочерние элементы удаляются.
void QSplitter::addWidget(QWidget *widget)
Добавляет указанный widget в макет разделителя после всех других элементов.
Если widget уже находится в разделителе, он будет перемещён в новое положение.
Примечание: Разделитель принимает владение над виджетом.
См. также insertWidget(), widget() и indexOf().
[virtual protected] void QSplitter::changeEvent(QEvent *ev)
Переопределено из QWidget::changeEvent().
[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().
[virtual protected] bool QSplitter::event(QEvent *e)
Переопределено из QObject::event().
void QSplitter::getRange(int index, int *min, int *max) const
Возвращает допустимый диапазон разделителя с индексом index в *min и *max, если min и max не равны 0.
QSplitterHandle *QSplitter::handle(int index) const
Возвращает маркер слева (или сверху) для элемента в макете разделителя с заданным index. Маркер с индексом 0 всегда скрыт.
Для языков с направлением письма справа налево, таких как арабский и иврит, макет горизонтальных разделителей инвертируется. Маркер будет справа от виджета с индексом index.
См. также count(), widget(), indexOf(), createHandle() и setHandleWidth().
int QSplitter::indexOf(QWidget *widget) const
Возвращает индекс в макете разделителя указанного widget. Это также работает для маркеров.
Маркеры пронумерованы от 0. Их столько же, сколько и дочерних виджетов, но маркер с позицией 0 всегда скрыт.
void QSplitter::insertWidget(int index, QWidget *widget)
Вставляет указанный widget в макет разделения по указанному index.
Если widget уже присутствует в разделе, он будет перемещён в новое положение.
Если index — недопустимый индекс, widget будет вставлен в конец.
Примечание: Разделитель принимает владение widget.
См. также 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()
Обновляет состояние разделителя. Вам обычно не нужно вызывать эту функцию.
[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)
Этот сигнал испускается, когда ручка разделителя по определённому индексу была перемещена в позицию 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/archives/qt-5.6/qsplitter.html