QGraphicsEffect Class
La clase QGraphicsEffect es la clase base para todos los efectos gráficos. Más...
| Cabecera: | #include <QGraphicsEffect> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QObject |
| Heredado de: | QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, y QGraphicsOpacityEffect |
Tipos públicos
| enum | ChangeFlag { SourceAttached, SourceDetached, SourceBoundingRectChanged, SourceInvalidated } |
| flags | ChangeFlags |
| enum | PixmapPadMode { NoPad, PadToTransparentBorder, PadToEffectiveBoundingRect } |
Propiedades
- enabled : bool
Funciones públicas
| QGraphicsEffect(QObject *parent = nullptr) | |
| virtual | ~QGraphicsEffect() |
| QRectF | boundingRect() const |
| virtual QRectF | boundingRectFor(const QRectF &rect) const |
| bool | isEnabled() const |
Ranuras públicas
| void | setEnabled(bool enable) |
| void | update() |
Señales
| void | enabledChanged(bool enabled) |
Funciones protegidas
| 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() |
Descripción detallada
Los efectos alteran la apariencia de los elementos conectándose al proceso de renderizado y operando entre el dispositivo de origen (por ejemplo, QGraphicsPixmapItem) y el de destino (por ejemplo, QGraphicsView's viewport). Los efectos pueden desactivarse llamando a setEnabled(false). Si los efectos están desactivados, la fuente se renderiza directamente.
Para añadir un efecto visual a QGraphicsItem, por ejemplo, puedes utilizar uno de los efectos estándar, o alternativamente, crear tu propio efecto creando una subclase de QGraphicsEffect. A continuación, el efecto puede instalarse en el elemento mediante QGraphicsItem::setGraphicsEffect().
Qt proporciona los siguientes efectos estándar:
- QGraphicsBlurEffect - Desenfoca el elemento en un radio determinado
- QGraphicsDropShadowEffect - crea una sombra detrás del elemento
- QGraphicsColorizeEffect - muestra el elemento en sombras de un color determinado
- QGraphicsOpacityEffect - muestra el elemento con una opacidad
| |
|
|
|
|

Para obtener más información sobre cómo utilizar cada efecto, consulte la documentación del efecto específico.
Para crear tu propio efecto personalizado, crea una subclase de QGraphicsEffect (o de cualquier otro efecto existente) y reimplementa la función virtual draw(). Esta función es llamada cada vez que el efecto necesita redibujarse. La función draw() toma como argumento el pintor con el que se va a dibujar. Para más información, consulte la documentación de draw(). En la función draw() puedes llamar a sourcePixmap() para obtener un mapa de píxeles de la fuente del efecto gráfico que luego puedes procesar.
Si tu efecto cambia, utiliza update() para solicitar un redibujado. Si tu efecto personalizado cambia el rectángulo delimitador de la fuente, por ejemplo, un efecto de brillo radial puede necesitar aplicar un margen extra, puedes reimplementar la función virtual boundingRectFor(), y llamar a updateBoundingRect() para notificar al framework cada vez que este rectángulo cambie. La función virtual sourceChanged() se llama para notificar a los efectos que la fuente ha cambiado de alguna manera - por ejemplo, si la fuente es un QGraphicsRectItem y sus parámetros de rectángulo han cambiado.
Véase también QGraphicsItem::setGraphicsEffect() y QWidget::setGraphicsEffect().
Documentación de tipos de miembros
enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags
Este enum describe lo que ha cambiado en QGraphicsEffectSource.
| Constante | Valor | Descripción |
|---|---|---|
QGraphicsEffect::SourceAttached | 0x1 | El efecto está instalado en una fuente. |
QGraphicsEffect::SourceDetached | 0x2 | El efecto se ha desinstalado en una fuente. |
QGraphicsEffect::SourceBoundingRectChanged | 0x4 | El rectángulo delimitador de la fuente ha cambiado. |
QGraphicsEffect::SourceInvalidated | 0x8 | El aspecto visual de la fuente ha cambiado. |
El tipo ChangeFlags es un typedef para QFlags<ChangeFlag>. Almacena una combinación OR de valores ChangeFlag.
enum QGraphicsEffect::PixmapPadMode
Este enum describe cómo debe rellenarse el mapa de píxeles devuelto por sourcePixmap.
| Constante | Valor | Descripción |
|---|---|---|
QGraphicsEffect::NoPad | 0 | El mapa de píxeles no debe recibir ningún relleno adicional. |
QGraphicsEffect::PadToTransparentBorder | 1 | El mapa de píxeles debe rellenarse para asegurar que tiene un borde completamente transparente. |
QGraphicsEffect::PadToEffectiveBoundingRect | 2 | El mapa de píxeles debe rellenarse para que coincida con el rectángulo efectivo del efecto. |
Documentación de la propiedad
enabled : bool
Esta propiedad indica si el efecto está activado o no.
Si un efecto está desactivado, la fuente se renderizará con normalidad, sin interferencia del efecto. Si el efecto está activado, la fuente se renderizará con el efecto aplicado.
Esta propiedad está activada por defecto.
Utilizando esta propiedad, puede desactivar ciertos efectos en plataformas lentas, con el fin de asegurar que la interfaz de usuario es sensible.
Funciones de acceso:
| bool | isEnabled() const |
| void | setEnabled(bool enable) |
Señal del notificador:
| void | enabledChanged(bool enabled) |
Documentación de funciones miembro
QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)
Construye una nueva instancia de QGraphicsEffect con la dirección parent.
[virtual noexcept] QGraphicsEffect::~QGraphicsEffect()
Elimina el efecto de la fuente y destruye el efecto gráfico.
QRectF QGraphicsEffect::boundingRect() const
Devuelve el rectángulo efectivo de este efecto, es decir, el rectángulo de la fuente en coordenadas del dispositivo, ajustado por los márgenes aplicados por el propio efecto.
Véase también boundingRectFor() y updateBoundingRect().
[virtual] QRectF QGraphicsEffect::boundingRectFor(const QRectF &rect) const
Devuelve el rectángulo efectivo para este efecto, dado el rect proporcionado en las coordenadas del dispositivo. Cuando escriba su propio efecto personalizado, debe llamar a updateBoundingRect() siempre que cambie algún parámetro que pueda hacer que esta función devuelva un valor diferente.
Véase también sourceBoundingRect().
[pure virtual protected] void QGraphicsEffect::draw(QPainter *painter)
Esta función virtual pura dibuja el efecto y es llamada cada vez que la fuente necesita ser dibujada.
Reimplemente esta función en una subclase de QGraphicsEffect para proporcionar la implementación de dibujo del efecto, utilizando painter.
Por ejemplo:
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); } ... }
Esta función no debe ser llamada explícitamente por el usuario, ya que está pensada sólo para propósitos de reimplementación.
[protected] void QGraphicsEffect::drawSource(QPainter *painter)
Dibuja la fuente directamente usando el painter dado.
Esta función sólo debe invocarse desde QGraphicsEffect::draw().
Por ejemplo:
MyGraphicsOpacityEffect::draw(QPainter *painter) { // Fully opaque; draw directly without going through a pixmap. if (qFuzzyCompare(m_opacity, 1)) { drawSource(painter); return; } ... }
Véase también QGraphicsEffect::draw().
[signal] void QGraphicsEffect::enabledChanged(bool enabled)
Esta señal se emite cada vez que el efecto se activa o desactiva. El parámetro enabled contiene el nuevo estado de activación del efecto.
Nota: Señal notificadora para la propiedad enabled.
Véase también isEnabled().
[protected] QRectF QGraphicsEffect::sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
Devuelve el rectángulo delimitador de la fuente asignada al system dado.
Llamar a esta función con Qt::DeviceCoordinates fuera de QGraphicsEffect::draw() dará resultados indefinidos, ya que no hay contexto de dispositivo disponible.
Véase también draw().
[virtual protected] void QGraphicsEffect::sourceChanged(QGraphicsEffect::ChangeFlags flags)
Esta función virtual es llamada por QGraphicsEffect para notificar al efecto que la fuente ha cambiado. Si el efecto aplica alguna caché, ésta debe purgarse para reflejar el nuevo aspecto de la fuente.
En flags se describe lo que ha cambiado.
[protected] bool QGraphicsEffect::sourceIsPixmap() const
Devuelve true si la fuente efectivamente es un pixmap, por ejemplo, un QGraphicsPixmapItem.
Esta función es útil para fines de optimización. Por ejemplo, no tiene sentido dibujar la fuente en coordenadas de dispositivo para evitar el escalado del mapa de píxeles si esta función devuelve true - el mapa de píxeles fuente se escalará de todos modos.
[protected] QPixmap QGraphicsEffect::sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const
Devuelve un mapa de píxeles con la fuente pintada en él.
El parámetro system especifica el sistema de coordenadas que se utilizará para la fuente. El parámetro opcional offset devuelve el desplazamiento en el que debe pintarse el mapa de píxeles utilizando el pintor actual. Para controlar cómo se rellena el mapa de píxeles, utilice el parámetro mode.
El mapa de píxeles devuelto se recorta al rectángulo del dispositivo del pintor actual cuando system es Qt::DeviceCoordinates.
Llamar a esta función con Qt::DeviceCoordinates fuera de QGraphicsEffect::draw() dará resultados indefinidos, ya que no hay contexto de dispositivo disponible.
Véase también draw() y boundingRect().
[slot] void QGraphicsEffect::update()
Programa el redibujado del efecto. Llame a esta función siempre que sea necesario redibujar el efecto. Esta función no provoca el redibujado de la fuente.
Véase también updateBoundingRect().
[protected] void QGraphicsEffect::updateBoundingRect()
Esta función notifica al framework del efecto cuando el rectángulo delimitador del efecto ha cambiado. Como autor de efectos personalizados, debes llamar a esta función siempre que cambies algún parámetro que haga que la función virtual boundingRectFor() devuelva un valor diferente.
Esta función llamará a update() si es necesario.
Véase también boundingRectFor(), boundingRect(), y sourceBoundingRect().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.




