Sur cette page

QGraphicsEffect Class

La classe QGraphicsEffect est la classe de base pour tous les effets graphiques. Plus d'informations...

En-tête : #include <QGraphicsEffect>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite : QObject
Hérités par :

QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, et QGraphicsOpacityEffect

Types publics

enum ChangeFlag { SourceAttached, SourceDetached, SourceBoundingRectChanged, SourceInvalidated }
flags ChangeFlags
enum PixmapPadMode { NoPad, PadToTransparentBorder, PadToEffectiveBoundingRect }

Propriétés

Fonctions publiques

QGraphicsEffect(QObject *parent = nullptr)
virtual ~QGraphicsEffect()
QRectF boundingRect() const
virtual QRectF boundingRectFor(const QRectF &rect) const
bool isEnabled() const

Emplacements publics

void setEnabled(bool enable)
void update()

Signaux

void enabledChanged(bool enabled)

Fonctions protégées

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()

Description détaillée

Les effets modifient l'apparence des éléments en s'insérant dans le pipeline de rendu et en opérant entre la source (par exemple, un QGraphicsPixmapItem) et le périphérique de destination (par exemple, la fenêtre de QGraphicsView). Les effets peuvent être désactivés en appelant setEnabled(false). Si les effets sont désactivés, la source est rendue directement.

Pour ajouter un effet visuel à une page QGraphicsItem, par exemple, vous pouvez utiliser l'un des effets standard ou créer votre propre effet en créant une sous-classe de QGraphicsEffect. L'effet peut ensuite être installé sur l'élément à l'aide de QGraphicsItem::setGraphicsEffect().

Qt fournit les effets standard suivants

Image d'un poisson sans effets graphiques

Effet de flou sur l'image d'un poisson

Effet de couleur bleue sur l'image d'un poisson

Effet d'opacité sur l'image d'un poisson

Effet d'ombre portée sur l'image d'un poisson

Opacité des effets d'ombre portée appliqués à une application

Pour plus d'informations sur l'utilisation de chaque effet, reportez-vous à la documentation correspondante.

Pour créer votre propre effet personnalisé, créez une sous-classe de QGraphicsEffect (ou de tout autre effet existant) et réimplémentez la fonction virtuelle draw(). Cette fonction est appelée chaque fois que l'effet doit être redessiné. La fonction draw() prend en argument le peintre avec lequel dessiner. Pour plus d'informations, reportez-vous à la documentation de la fonction draw(). Dans la fonction draw(), vous pouvez appeler sourcePixmap() pour obtenir une pixmap de la source de l'effet graphique que vous pouvez ensuite traiter.

Si votre effet change, utilisez update() pour demander un nouveau dessin. Si votre effet personnalisé modifie le rectangle de délimitation de la source (par exemple, un effet d'éclat radial peut nécessiter l'application d'une marge supplémentaire), vous pouvez réimplémenter la fonction virtuelle boundingRectFor() et appeler updateBoundingRect() pour informer le cadre de travail de toute modification de ce rectangle. La fonction virtuelle sourceChanged() est appelée pour signaler aux effets que la source a changé d'une manière ou d'une autre - par exemple, si la source est un QGraphicsRectItem et que ses paramètres de rectangle ont changé.

Voir également QGraphicsItem::setGraphicsEffect() et QWidget::setGraphicsEffect().

Documentation des types de membres

enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags

Cette énumération décrit ce qui a changé dans QGraphicsEffectSource.

ConstanteValeurDescription de l'effet
QGraphicsEffect::SourceAttached0x1L'effet est installé sur une source.
QGraphicsEffect::SourceDetached0x2L'effet est désinstallé sur une source.
QGraphicsEffect::SourceBoundingRectChanged0x4Le rectangle de délimitation de la source a changé.
QGraphicsEffect::SourceInvalidated0x8L'aspect visuel de la source a changé.

Le type ChangeFlags est un typedef pour QFlags<ChangeFlag>. Il stocke une combinaison OU de valeurs ChangeFlag.

enum QGraphicsEffect::PixmapPadMode

Cette énumération décrit comment la pixmap renvoyée par sourcePixmap doit être remplie.

ConstanteValeurDescription
QGraphicsEffect::NoPad0La pixmap ne doit pas recevoir de rembourrage supplémentaire.
QGraphicsEffect::PadToTransparentBorder1La pixmap doit être rembourrée pour s'assurer qu'elle a une bordure complètement transparente.
QGraphicsEffect::PadToEffectiveBoundingRect2La pixmap doit être remplie pour correspondre au rectangle de délimitation effectif de l'effet.

Propriété Documentation

enabled : bool

Cette propriété indique si l'effet est activé ou non.

Si un effet est désactivé, la source sera rendue normalement, sans interférence de l'effet. Si l'effet est activé, la source sera rendue avec l'effet appliqué.

Cette propriété est activée par défaut.

Cette propriété permet de désactiver certains effets sur les plateformes lentes, afin de garantir la réactivité de l'interface utilisateur.

Fonctions d'accès :

bool isEnabled() const
void setEnabled(bool enable)

Signal Notifier :

void enabledChanged(bool enabled)

Member Function Documentation

QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)

Construit une nouvelle instance de QGraphicsEffect ayant la valeur spécifiée parent.

[virtual noexcept] QGraphicsEffect::~QGraphicsEffect()

Supprime l'effet de la source et détruit l'effet graphique.

QRectF QGraphicsEffect::boundingRect() const

Renvoie le rectangle de délimitation effectif pour cet effet, c'est-à-dire le rectangle de délimitation de la source en coordonnées de l'appareil, ajusté en fonction des marges appliquées par l'effet lui-même.

Voir également boundingRectFor() et updateBoundingRect().

[virtual] QRectF QGraphicsEffect::boundingRectFor(const QRectF &rect) const

Renvoie le rectangle de délimitation effectif pour cet effet, compte tenu de l'adresse rect fournie dans les coordonnées de l'appareil. Lorsque vous écrivez votre propre effet personnalisé, vous devez appeler updateBoundingRect() chaque fois qu'un paramètre est modifié et que cette fonction peut renvoyer une valeur différente.

Voir également sourceBoundingRect().

[pure virtual protected] void QGraphicsEffect::draw(QPainter *painter)

Cette fonction virtuelle pure dessine l'effet et est appelée chaque fois que la source doit être dessinée.

Réimplémentez cette fonction dans une sous-classe de QGraphicsEffect pour fournir l'implémentation du dessin de l'effet, en utilisant painter.

Par exemple :

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);
    }
    ...
}

Cette fonction ne doit pas être appelée explicitement par l'utilisateur, car elle n'est destinée qu'à des fins de réimplémentation.

[protected] void QGraphicsEffect::drawSource(QPainter *painter)

Dessine la source directement en utilisant la valeur donnée painter.

Cette fonction ne doit être appelée qu'à partir de QGraphicsEffect::draw().

Par exemple :

MyGraphicsOpacityEffect::draw(QPainter *painter)
{
    // Fully opaque; draw directly without going through a pixmap.
    if (qFuzzyCompare(m_opacity, 1)) {
        drawSource(painter);
        return;
    }
    ...
}

Voir aussi QGraphicsEffect::draw().

[signal] void QGraphicsEffect::enabledChanged(bool enabled)

Ce signal est émis lorsque l'effet est activé ou désactivé. Le paramètre enabled contient le nouvel état activé de l'effet.

Note : Signal de notification pour la propriété enabled.

Voir également isEnabled().

[protected] QRectF QGraphicsEffect::sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const

Renvoie le rectangle de délimitation de la source mappée sur le site system.

L'appel à cette fonction avec Qt::DeviceCoordinates en dehors de QGraphicsEffect::draw() donnera des résultats indéfinis, car il n'y a pas de contexte de périphérique disponible.

Voir aussi draw().

[virtual protected] void QGraphicsEffect::sourceChanged(QGraphicsEffect::ChangeFlags flags)

Cette fonction virtuelle est appelée par QGraphicsEffect pour notifier à l'effet que la source a changé. Si l'effet applique un cache, celui-ci doit être purgé afin de refléter la nouvelle apparence de la source.

Le site flags décrit ce qui a changé.

[protected] bool QGraphicsEffect::sourceIsPixmap() const

Renvoie true si la source est effectivement une pixmap, par exemple QGraphicsPixmapItem.

Cette fonction est utile à des fins d'optimisation. Par exemple, il est inutile de dessiner la source en coordonnées de périphérique pour éviter la mise à l'échelle de la pixmap si cette fonction renvoie true - la pixmap source sera de toute façon mise à l'échelle.

[protected] QPixmap QGraphicsEffect::sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const

Renvoie une pixmap avec la source peinte à l'intérieur.

Le paramètre system spécifie le système de coordonnées à utiliser pour la source. Le paramètre optionnel offset renvoie le décalage auquel le pixmap doit être peint en utilisant le peintre actuel. Pour contrôler la façon dont la pixmap est remplie, utilisez le paramètre mode.

La pixmap renvoyée est découpée dans le rectangle du peintre actuel lorsque system est Qt::DeviceCoordinates.

L'appel de cette fonction avec Qt::DeviceCoordinates en dehors de QGraphicsEffect::draw() donnera des résultats indéfinis, car il n'y a pas de contexte de périphérique disponible.

Voir aussi draw() et boundingRect().

[slot] void QGraphicsEffect::update()

Planifie un nouveau dessin de l'effet. Cette fonction est appelée chaque fois que l'effet doit être redessiné. Cette fonction ne déclenche pas un nouveau dessin de la source.

Voir également updateBoundingRect().

[protected] void QGraphicsEffect::updateBoundingRect()

Cette fonction notifie le cadre de l'effet lorsque le rectangle de délimitation de l'effet a changé. En tant qu'auteur d'un effet personnalisé, vous devez appeler cette fonction chaque fois que vous modifiez des paramètres qui amèneront la fonction virtuelle boundingRectFor() à renvoyer une valeur différente.

Cette fonction appellera update() si nécessaire.

Voir également boundingRectFor(), boundingRect() et 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.