Spec-Zone.ru › Qt 5.15

Класс QGraphicsEffect

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

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

QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect и QGraphicsOpacityEffect

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

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

Типы публичного доступа

Перечисление 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-5.15/qgraphicseffect.html

Spec-Zone.ru

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