Spec-Zone.ru › Qt 6.1

Класс QGraphicsLayout

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

Заголовок: #include <QGraphicsLayout>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследуется от: 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

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

void addChildLayoutItem(QGraphicsLayoutItem *layoutItem)

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

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, и параметр isLayout объекта QGraphicsLayoutItem устанавливается в 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 уже находится в другом макете, он будет удален из этого макета.

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

См. также 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(qreal *left, qreal *top, qreal *right, qreal *bottom) const.

[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/qt-6.1/qgraphicslayout.html

Spec-Zone.ru

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