Spec-Zone.ru › Qt 5.15

Класс QGraphicsLayout

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

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

QGraphicsAnchorLayout, QGraphicsGridLayout и QGraphicsLinearLayout

Этот класс был представлен в Qt 4.4.

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

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

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, и аргумент 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(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-5.15/qgraphicslayout.html

Spec-Zone.ru

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