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
- enabled : bool
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
- QGraphicsBlurEffect - rend l'élément flou d'un rayon donné
- QGraphicsDropShadowEffect - rend une ombre portée derrière l'élément
- QGraphicsColorizeEffect - rend l'élément dans des nuances de n'importe quelle couleur donnée
- QGraphicsOpacityEffect - rend l'élément avec une opacité
| |
|
|
|
|

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.
| Constante | Valeur | Description de l'effet |
|---|---|---|
QGraphicsEffect::SourceAttached | 0x1 | L'effet est installé sur une source. |
QGraphicsEffect::SourceDetached | 0x2 | L'effet est désinstallé sur une source. |
QGraphicsEffect::SourceBoundingRectChanged | 0x4 | Le rectangle de délimitation de la source a changé. |
QGraphicsEffect::SourceInvalidated | 0x8 | L'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.
| Constante | Valeur | Description |
|---|---|---|
QGraphicsEffect::NoPad | 0 | La pixmap ne doit pas recevoir de rembourrage supplémentaire. |
QGraphicsEffect::PadToTransparentBorder | 1 | La pixmap doit être rembourrée pour s'assurer qu'elle a une bordure complètement transparente. |
QGraphicsEffect::PadToEffectiveBoundingRect | 2 | La 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.




