Spec-Zone.ru › Qt 5.6

Класс 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 = Q_NULLPTR)
виртуальный ~QGraphicsEffect()
QRectF boundingRect() const
виртуальный 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

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

виртуальный void draw(QPainter *painter) = 0
void drawSource(QPainter *painter)
QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
виртуальный void sourceChanged(ChangeFlags flags)
bool sourceIsPixmap() const
QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = Q_NULLPTR, PixmapPadMode mode = PadToEffectiveBoundingRect) const
void updateBoundingRect()
  • 9 защищённых функций унаследовано от QObject

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

  • 11 статических публичных членов унаследовано от 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

Это перечисление описывает, как должна быть дополнена пиксельная область, возвращенная функцией 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 = Q_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(ChangeFlags flags)

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

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

[protected] bool QGraphicsEffect::sourceIsPixmap() const

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

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

[protected] QPixmap QGraphicsEffect::sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = Q_NULLPTR, 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.6/qgraphicseffect.html

Spec-Zone.ru

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