Класс QGraphicsEffect
Класс QGraphicsEffect является базовым классом для всех графических эффектов. Подробнее...
| Заголовок: | #include <QGraphicsEffect> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QObject |
| Наследуется от: | QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect и QGraphicsOpacityEffect |
Открытые типы
| Перечисление | 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-6.1/qgraphicseffect.html