Класс 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() принимает в качестве аргумента объект рисования, с помощью которого нужно рисовать. Для получения дополнительной информации обратитесь к документации для 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-5.13/qgraphicseffect.html