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