Класс 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