Класс 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 |
- 32 открытых функции унаследованы от 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) и целевым устройством (например, viewport 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 — это псевдоним для 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/qt-5.9/qgraphicseffect.html