Spec-Zone.ru › Qt 5.11

Класс 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
  • 34 функции публичного доступа унаследованы от QObject

Свойства с публичным слотом

void setEnabled(bool enable)
void update()
  • 1 свойство с публичным слотом унаследовано от QObject

Сигналы

void enabledChanged(bool enabled)
  • 2 сигнала унаследованы от 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

Дополнительные унаследованные члены

  • 1 переменная публичного доступа унаследована от QObject
  • 10 статические члены публичного доступа унаследованы от QObject
  • 2 защищенные переменные унаследованы от 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>. Он хранит результат объединения по оператору OR значений 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.

[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/archives/qt-5.11/qgraphicseffect.html

Spec-Zone.ru

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