Spec-Zone.ru › Qt 5.12

Класс QGraphicsEffect

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

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

QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect и QGraphicsOpacityEffect

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

Общедоступные типы

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

Свойства

  • enabled : bool
  • 1 свойство унаследовано от QObject

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

QGraphicsEffect(QObject *parent = nullptr)
virtual ~QGraphicsEffect()
QRectF boundingRect() const
virtual QRectF boundingRectFor(const QRectF &rect) const
bool isEnabled() const
  • 31 открытая функция унаследована от QObject

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

void setEnabled(bool enable)
void update()
  • 1 открытый слот унаследован от QObject

Сигналы

void enabledChanged(bool enabled)
  • 2 сигнала унаследованы от QObject

Статические открытые члены

const QMetaObject staticMetaObject
  • 9 статических открытых членов унаследованы от QObject

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

virtual void draw(QPainter *painter) = 0
void drawSource(QPainter *painter)
QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
virtual 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()
  • 9 защищённых функций унаследованы от QObject

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

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

Эффекты изменяют внешний вид элементов, подключаясь к конвейеру отрисовки и работая между источником (например, QGraphicsPixmapItem) и целевым устройством (например, областью просмотра 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

Это перечисление описывает, как должна быть отступа область pixmap, возвращенная из 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.

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

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

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

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

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

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

[slot] void QGraphicsEffect::update()

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

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

[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.12/qgraphicseffect.html

Spec-Zone.ru

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