Spec-Zone.ru › Qt 6.0

Класс QGraphicsEffect

Класс QGraphicsEffect является базовым классом для всех графических эффектов. Подробнее...

Заголовок: #include <QGraphicsEffect>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследует: QObject
Наследуется:

QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect и QGraphicsOpacityEffect

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

Типы

Перечисление ChangeFlag { SourceAttached, SourceDetached, SourceBoundingRectChanged, SourceInvalidated }
флаги ChangeFlags
Перечисление PixmapPadMode { NoPad, PadToTransparentBorder, PadToEffectiveBoundingRect }

Свойства

  • enabled : bool

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

QGraphicsEffect(QObject *parent = nullptr)
виртуальный ~QGraphicsEffect()
QRectF boundingRect() const
виртуальный QRectF boundingRectFor(const QRectF &rect) const
bool isEnabled() const

Открытые слоты

void setEnabled(bool enable)
void update()

Сигналы

void enabledChanged(bool enabled)

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

виртуальный void draw(QPainter *painter) = 0
void drawSource(QPainter *painter)
QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
виртуальный void sourceChanged(QGraphicsEffect::ChangeFlags flags)
bool sourceIsPixmap() const
QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const
void updateBoundingRect()

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

Эффекты изменяют внешний вид элементов, подключаясь к конвейеру отрисовки и работая между источником (например, QGraphicsPixmapItem) и устройством назначения (например, viewport QGraphicsView). Эффекты могут быть отключены вызовом setEnabled(false). Если эффекты отключены, источник отображается непосредственно.

Чтобы добавить визуальный эффект к QGraphicsItem, например, вы можете использовать один из стандартных эффектов, или, альтернативно, создать свой собственный эффект, создав подкласс QGraphicsEffect. Затем эффект можно установить на элемент с помощью QGraphicsItem::setGraphicsEffect().

Qt предоставляет следующие стандартные эффекты:

  • QGraphicsBlurEffect — размывает элемент на заданный радиус
  • QGraphicsDropShadowEffect — отрисовывает тень за элементом
  • QGraphicsColorizeEffect — отображает элемент в оттенках любого заданного цвета
  • QGraphicsOpacityEffect — отображает элемент с заданной непрозрачностью

Дополнительную информацию о том, как использовать каждый эффект, см. в документации по конкретному эффекту.

Чтобы создать собственный пользовательский эффект, создайте подкласс QGraphicsEffect (или любого другого существующего эффекта) и переопределите виртуальную функцию draw(). Эта функция вызывается всякий раз, когда эффект нужно перерисовать. Функция draw() принимает в качестве аргумента painter, с помощью которого нужно рисовать. Дополнительную информацию см. в документации по draw(). В функции draw() вы можете вызвать sourcePixmap(), чтобы получить пиксель изображения источника графического эффекта, который затем можно обработать.

Если ваш эффект изменяется, используйте update(), чтобы запросить перерисовку. Если ваш пользовательский эффект изменяет прямоугольник ограничивающей области источника, например, радиальный эффект свечения может потребовать применить дополнительный отступ, вы можете переопределить виртуальную функцию boundingRectFor() и вызвать updateBoundingRect(), чтобы уведомить фреймворк всякий раз, когда этот прямоугольник изменяется. Виртуальная функция sourceChanged() вызывается для уведомления эффектов о том, что источник каким-либо образом изменился, например, если источник является QGraphicsRectItem, и параметры его прямоугольника изменились.

См. также QGraphicsItem::setGraphicsEffect() и QWidget::setGraphicsEffect().

Документация по типу членов

перечисление QGraphicsEffect::ChangeFlagфлаги QGraphicsEffect::ChangeFlags

Это перечисление описывает, что изменилось в QGraphicsEffectSource.

Постоянная Значение Описание
QGraphicsEffect::SourceAttached 0x1 Эффект установлен на источник.
QGraphicsEffect::SourceDetached 0x2 Эффект снят с источника.
QGraphicsEffect::SourceBoundingRectChanged 0x4 Изменился прямоугольник ограничивающей области источника.
QGraphicsEffect::SourceInvalidated 0x8 Изменился визуальный вид источника.

Тип ChangeFlags является типом-псевдонимом для QFlags<ChangeFlag>. Он хранит логическое ИЛИ сочетание значений ChangeFlag.

перечисление QGraphicsEffect::PixmapPadMode

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

Постоянная Значение Описание
QGraphicsEffect::NoPad 0 Пиксель изображения не должен получать дополнительного форматирования.
QGraphicsEffect::PadToTransparentBorder 1 Пиксель изображения должен быть отформатирован для обеспечения полностью прозрачного края.
QGraphicsEffect::PadToEffectiveBoundingRect 2 Пиксель изображения должен быть отформатирован для соответствия эффективному прямоугольнику ограничивающей области эффекта.

Документация свойств

enabled : bool

Это свойство указывает, включен ли эффект.

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

Это свойство включено по умолчанию.

С помощью этого свойства можно отключать определенные эффекты на медленных платформах, чтобы обеспечить отзывчивость пользовательского интерфейса.

Функции доступа:

bool isEnabled() const
void setEnabled(bool enable)

Сигнал уведомления:

void enabledChanged(bool enabled)

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

QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)

Создает новый экземпляр QGraphicsEffect с указанным parent.

[signal] void QGraphicsEffect::enabledChanged(bool enabled)

Этот сигнал излучается всякий раз, когда эффект включается или выключается. Параметр enabled содержит новое состояние включения эффекта.

Примечание: Сигнал уведомления для свойства enabled.

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

[slot] void QGraphicsEffect::update()

Планирует перерисовку эффекта. Вызывайте эту функцию всякий раз, когда эффект нужно перерисовать. Эта функция не вызывает перерисовку источника.

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

[virtual] QGraphicsEffect::~QGraphicsEffect()

Удаляет эффект из источника и уничтожает графический эффект.

QRectF QGraphicsEffect::boundingRect() const

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

См. также boundingRectFor() и updateBoundingRect().

[virtual] QRectF QGraphicsEffect::boundingRectFor(const QRectF &rect) const

Возвращает эффективную ограничивающую прямоугольную область для этого эффекта, учитывая предоставленный прямоугольник rect в координатах устройства. При написании собственного пользовательского эффекта вы должны вызвать updateBoundingRect() всякий раз, когда меняются какие-либо параметры, которые могут привести к возвращению другим значением этой функции.

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

[pure virtual protected] void QGraphicsEffect::draw(QPainter *painter)

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

Переопределите эту функцию в подклассе QGraphicsEffect, чтобы обеспечить реализацию отрисовки эффекта, используя painter.

Например:

MyGraphicsEffect::draw(QPainter *painter)
{
    ...
    QPoint offset;
    if (sourceIsPixmap()) {
        // No point in drawing in device coordinates (pixmap will be scaled anyways).
        const QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset);
        ...
        painter->drawPixmap(offset, pixmap);
    } else {
        // Draw pixmap in device coordinates to avoid pixmap scaling;
        const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset);
        painter->setWorldTransform(QTransform());
        ...
        painter->drawPixmap(offset, pixmap);
    }
    ...
}

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

[protected] void QGraphicsEffect::drawSource(QPainter *painter)

Отрисовывает источник непосредственно с помощью указанного painter.

Эта функция должна вызываться только из QGraphicsEffect::draw().

Например:

MyGraphicsOpacityEffect::draw(QPainter *painter)
{
    // Fully opaque; draw directly without going through a pixmap.
    if (qFuzzyCompare(m_opacity, 1)) {
        drawSource(painter);
        return;
    }
    ...
}

См. также QGraphicsEffect::draw().

[protected] QRectF QGraphicsEffect::sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const

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

Вызов этой функции с Qt::DeviceCoordinates вне QGraphicsEffect::draw() даст неопределённые результаты, так как контекст устройства недоступен.

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

[virtual protected] void QGraphicsEffect::sourceChanged(QGraphicsEffect::ChangeFlags flags)

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

Параметр flags описывает, что изменилось.

[protected] bool QGraphicsEffect::sourceIsPixmap() const

Возвращает true если источник фактически является пиктограммой, например, QGraphicsPixmapItem.

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

[protected] QPixmap QGraphicsEffect::sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const

Возвращает пиктограмму с нарисованным в ней источником.

Параметр system указывает, какую систему координат использовать для источника. Необязательный параметр offset возвращает смещение, в котором должна быть нарисована пиктограмма с использованием текущего объекта рисования. Для управления тем, как заполняется пиктограмма, используйте параметр mode.

Возвращаемая пиктограмма обрезается до текущего прямоугольника устройства объекта рисования, когда system имеет значение Qt::DeviceCoordinates.

Вызов этой функции с Qt::DeviceCoordinates вне QGraphicsEffect::draw() даст неопределённые результаты, так как контекст устройства недоступен.

См. также draw() и boundingRect().

[protected] void QGraphicsEffect::updateBoundingRect()

Эта функция уведомляет фреймворк эффектов, когда ограничивающая прямоугольная область эффекта изменилась. Как автору пользовательского эффекта, вы должны вызвать эту функцию всякий раз, когда вы изменяете любые параметры, которые приведут к тому, что виртуальная функция boundingRectFor() вернёт другое значение.

Эта функция вызовет update(), если это необходимо.

См. также boundingRectFor(), boundingRect() и sourceBoundingRect().

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

Spec-Zone.ru

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