Spec-Zone.ru › Qt 5.14

Класс 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) и целевым устройством (например, область просмотра QGraphicsView). Эффекты могут быть отключены, вызвав setEnabled(false). Если эффекты отключены, источник рендерится непосредственно.

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

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

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

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

Чтобы создать собственный пользовательский эффект, создайте подкласс QGraphicsEffect (или любого другого существующего эффекта) и переопределите виртуальную функцию draw(). Эта функция вызывается всякий раз, когда требуется перерисовка эффекта. Функция draw() принимает в качестве аргумента объект QPainter для рисования. Для получения дополнительной информации обратитесь к документации для 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 является типом typedef для 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.14/qgraphicseffect.html

Spec-Zone.ru

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