Spec-Zone.ru › Qt 5.6

Класс QGraphicsLayout

Класс QGraphicsLayout предоставляет базовый класс для всех компоновок в Вид графики. Подробнее...

Заголовок: #include <QGraphicsLayout>
qmake: QT += widgets
С момента: Qt 4.4
Наследует: QGraphicsLayoutItem
Наследуется от:

QGraphicsAnchorLayout, QGraphicsGridLayout и QGraphicsLinearLayout

  • Список всех членов, включая наследуемые

Открытые функции

QGraphicsLayout(QGraphicsLayoutItem *parent = Q_NULLPTR)
~QGraphicsLayout()
void activate()
virtual int count() const = 0
virtual void invalidate()
bool isActivated() const
virtual QGraphicsLayoutItem * itemAt(int i) const = 0
virtual void removeAt(int index) = 0
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
virtual void widgetEvent(QEvent *e)

Переопределённые открытые функции

virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
virtual void updateGeometry()
  • 35 открытых функций, унаследованных от QGraphicsLayoutItem

Защищённые функции

void addChildLayoutItem(QGraphicsLayoutItem *layoutItem)
  • 3 защищённых функции, унаследованных от QGraphicsLayoutItem

Подробное описание

Класс QGraphicsLayout предоставляет базовый класс для всех компоновок в Вид графики.

QGraphicsLayout — абстрактный класс, определяющий виртуальный API для упорядочения элементов QGraphicsWidget и других объектов QGraphicsLayoutItem для QGraphicsWidget. QGraphicsWidget делегирует ответственность QGraphicsLayout через QGraphicsWidget::setLayout(). При изменении размеров виджета компоновка автоматически упорядочит элементы виджета. QGraphicsLayout наследует QGraphicsLayoutItem, поэтому может быть управляемым любой компоновкой, включая его собственные подклассы.

Создание пользовательской компоновки

Вы можете использовать QGraphicsLayout в качестве базового класса для создания собственной кастомной компоновки (например, компоновки по потокам), но чаще используется один из его подклассов — QGraphicsLinearLayout или QGraphicsGridLayout. При создании пользовательской компоновки по крайней мере необходимо переопределить следующие функции:

Функция Описание
QGraphicsLayoutItem::setGeometry() Уведомляет вас, когда геометрия компоновки задается. Вы можете сохранить геометрию в собственном классе компоновки в переопределении этой функции.
QGraphicsLayoutItem::sizeHint() Возвращает подсказки размера компоновки.
QGraphicsLayout::count() Возвращает количество элементов в вашей компоновке.
QGraphicsLayout::itemAt() Возвращает указатель на элемент в вашей компоновке.
QGraphicsLayout::removeAt() Удаляет элемент из вашей компоновки без его уничтожения.

Для получения более подробной информации о реализации каждой функции обратитесь к документации по отдельным функциям.

Каждая компоновка определяет свой собственный API для упорядочения виджетов и элементов компоновки. Например, в случае с компоновкой сетки вам потребуются индексы строки и столбца с необязательными пролетами строк и столбцов, выравниванием, отступами и т. д. В случае с линейной компоновкой, однако, требуется единственный индекс строки или столбца для позиционирования элементов. В случае с компоновкой сетки порядок вставки никак не влияет на компоновку, но в случае с линейной компоновкой порядок имеет значение. При написании собственного подкласса компоновки вы можете выбрать API, который лучше всего соответствует вашей компоновке.

QGraphicsLayout предоставляет удобную функцию addChildLayoutItem() для добавления элементов компоновки в пользовательскую компоновку. Функция автоматически изменит родительские элементы графических элементов, если это необходимо.

Активация компоновки

При изменении геометрии компоновки QGraphicsLayout немедленно переупорядочивает все управляемые элементы, вызывая setGeometry() для каждого элемента. Это переупорядочение называется активацией компоновки.

QGraphicsLayout обновляет свою собственную геометрию, чтобы она соответствовала contentsRect() управляемого QGraphicsLayoutItem. Таким образом, он автоматически переупорядочит все свои элементы при изменении размеров виджета. QGraphicsLayout кэширует размеры всех управляемых элементов, чтобы избежать слишком частых вызовов setGeometry().

Примечание: QGraphicsLayout будет иметь такую же геометрию, как и contentsRect() виджета (а не компоновки), которому он назначен.

Неявная активация компоновки

Компоновка может быть активирована неявно двумя способами: вызовом activate() или invalidate(). Вызов activate() активирует компоновку немедленно. Напротив, вызов invalidate() отложен, так как он публикует событие LayoutRequest управляемому виджету. Из-за сжатия событий activate() будет вызван только один раз после возвращения управления в цикл обработки событий. Это называется инвалидацией компоновки. Невалидация компоновки также приводит к невалидации кэшированной информации. Кроме того, функция invalidate() является виртуальной функцией. Таким образом, вы можете невалидировать собственный кэш в подклассе QGraphicsLayout, переопределив эту функцию.

Обработка событий

QGraphicsLayout прослушивает события для управляемого им виджета через виртуальный обработчик событий widgetEvent(). Когда компоновка назначена виджету, все события, отправленные виджету, сначала обрабатываются widgetEvent(). Это позволяет компоновке быть в курсе любых значимых изменений состояния виджета, таких как изменения видимости или направления компоновки.

Обработка отступов

Отступы QGraphicsLayout могут быть изменены путем переопределения setContentsMargins() и getContentsMargins().

Документация функций-членов

QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent = Q_NULLPTR)

Конструирует объект QGraphicsLayout.

parent передаётся в конструктор QGraphicsLayoutItem, и аргумент QGraphicsLayoutItem's isLayout устанавливается в true.

Если parent является QGraphicsWidget, компоновка будет установлена на этот виджет. (Обратите внимание, что установка компоновки удалит старую установленную.)

QGraphicsLayout::~QGraphicsLayout()

Уничтожает объект QGraphicsLayout.

void QGraphicsLayout::activate()

Активирует макет, вызывая немедленное переупорядочение всех элементов в макете. Эта функция основана на вызовах count() и itemAt(), а затем на вызове setGeometry() для всех элементов последовательно. При активации макет будет корректировать свою геометрию в соответствии с contentsRect() родительского элемента. Родительский элемент затем аннулирует любой свой собственный макет.

Если функция вызывается последовательно или рекурсивно, например, одним из элементов макета в ответ на изменение его размера, эта функция ничего не сделает.

Обратите внимание, что макет свободен использовать кэширование геометрии для оптимизации этого процесса. Чтобы принудительно аннулировать такой кэш, можно вызвать invalidate() перед вызовом activate().

См. также invalidate().

[protected] void QGraphicsLayout::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)

Эта функция является удобной функцией для пользовательских макетов и пройдет по всем элементам макета и переродинит их графические элементы до ближайшего предка QGraphicsWidget макета.

Если layoutItem уже находится в другом макете, он будет удален из этого макета.

Если пользовательские макеты хотят специального поведения, они могут проигнорировать использование этой функции и реализовать своё собственное поведение.

Эта функция была добавлена в Qt 4.6.

См. также graphicsItem().

[pure virtual] int QGraphicsLayout::count() const

Эта чисто виртуальная функция должна быть переопределена в подклассе QGraphicsLayout для возвращения количества элементов в макете.

Подкласс свободен выбирать, как хранить элементы.

См. также itemAt() и removeAt().

[virtual] void QGraphicsLayout::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const

Переопределено из QGraphicsLayoutItem::getContentsMargins().

[virtual] void QGraphicsLayout::invalidate()

Очищает любые кэшированные геометрические данные и данные размера в макете и отправляет событие LayoutRequest управляемому родительскому элементу QGraphicsLayoutItem.

См. также activate() и setGeometry().

bool QGraphicsLayout::isActivated() const

Возвращает true если макет в настоящее время активируется; в противном случае, возвращает false. Если макет активируется, это означает, что он в настоящее время переупорядочивает свои элементы (т.е. функция activate() была вызвана и ещё не вернулась).

См. также activate() и invalidate().

[pure virtual] QGraphicsLayoutItem *QGraphicsLayout::itemAt(int i) const

Эта чисто виртуальная функция должна быть переопределена в подклассе QGraphicsLayout для возвращения указателя на элемент по индексу i. Реализация может полагаться на то, что i допустим (т.е. учитывает значение count()). Вместе с count() она предназначена для итерирования по всем элементам макета.

Подкласс свободен выбирать, как хранить элементы, и визуальная организация не обязана отражаться через эту функцию.

См. также count() и removeAt().

[pure virtual] void QGraphicsLayout::removeAt(int index)

Эта чисто виртуальная функция должна быть переопределена в подклассе QGraphicsLayout для удаления элемента по индексу index. Реализация может полагаться на то, что index допустим (т.е. учитывает значение count()).

Реализация должна гарантировать, что parentLayoutItem() удаленного элемента не указывает на этот макет, так как элемент считается удаленным из иерархии макетов.

Если макет должен использоваться между приложениями, рекомендуется, чтобы макет удалял элемент, но фреймворк графического представления не зависит от этого.

Подкласс свободен выбирать, как хранить элементы.

См. также itemAt() и count().

void QGraphicsLayout::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)

Устанавливает отступы содержимого в left, top, right и bottom. По умолчанию отступы содержимого для макетов верхнего уровня зависят от стиля (через запрос pixelMetric для QStyle::PM_LayoutLeftMargin, QStyle::PM_LayoutTopMargin, QStyle::PM_LayoutRightMargin и QStyle::PM_LayoutBottomMargin).

Для дочерних макетов отступы по умолчанию равны 0.

Изменение отступов содержимого автоматически аннулирует макет.

См. также invalidate().

[virtual] void QGraphicsLayout::updateGeometry()

Переопределено из QGraphicsLayoutItem::updateGeometry().

[virtual] void QGraphicsLayout::widgetEvent(QEvent *e)

Этот виртуальный обработчик событий получает все события для управляемого виджета. QGraphicsLayout использует этот обработчик событий для прослушивания событий, связанных с макетом, таких как изменения геометрии, изменения макета или изменения направления макета.

e — указатель на событие.

Вы можете переопределить этот обработчик событий, чтобы отслеживать аналогичные события для своего пользовательского макета.

См. также QGraphicsWidget::event() и QGraphicsItem::sceneEvent().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qgraphicslayout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API