Spec-Zone.ru › Qt 5.11

Класс QGraphicsLayout

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

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

QGraphicsAnchorLayout, QGraphicsGridLayout и QGraphicsLinearLayout

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

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

QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)
virtual ~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 override
virtual void updateGeometry() override
  • 35 открытых функций унаследовано от QGraphicsLayoutItem

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

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

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

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

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

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

Вы можете использовать QGraphicsLayout в качестве основы для написания собственного пользовательского макета (например, flowlayout), но чаще используется один из его подклассов — 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 = nullptr)

Создаёт объект QGraphicsLayout.

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

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

[virtual] 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().

[override 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().

[override 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.11/qgraphicslayout.html

Spec-Zone.ru

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