QGraphicsEffect Class
Die Klasse „QGraphicsEffect“ ist die Basisklasse für alle Grafikeffekte. Mehr...
| Header: | #include <QGraphicsEffect> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Erbt von: | QObject |
| Vererbt an: | QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect und QGraphicsOpacityEffect |
Öffentliche Typen
| enum | ChangeFlag { SourceAttached, SourceDetached, SourceBoundingRectChanged, SourceInvalidated } |
| flags | ChangeFlags |
| enum | PixmapPadMode { NoPad, PadToTransparentBorder, PadToEffectiveBoundingRect } |
Eigenschaften
- enabled : bool
Öffentliche Funktionen
| QGraphicsEffect(QObject *parent = nullptr) | |
| virtual | ~QGraphicsEffect() |
| QRectF | boundingRect() const |
| virtual QRectF | boundingRectFor(const QRectF &rect) const |
| bool | isEnabled() const |
Öffentliche Slots
| void | setEnabled(bool enable) |
| void | update() |
Signale
| void | enabledChanged(bool enabled) |
Geschützte Funktionen
| 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() |
Detaillierte Beschreibung
Effekte verändern das Erscheinungsbild von Elementen, indem sie in die Rendering-Pipeline eingreifen und zwischen der Quelle (z. B. einem ` QGraphicsPixmapItem`) und dem Zielgerät (z. B. dem Viewport von ` QGraphicsView`) wirken. Effekte können durch den Aufruf von ` setEnabled(false)` deaktiviert werden. Sind Effekte deaktiviert, wird die Quelle direkt gerendert.
Um beispielsweise einem ` QGraphicsItem` einen visuellen Effekt hinzuzufügen, können Sie einen der Standard-Effekte verwenden oder alternativ einen eigenen Effekt erstellen, indem Sie eine Unterklasse von `QGraphicsEffect` anlegen. Der Effekt kann dann mit ` QGraphicsItem::setGraphicsEffect()` auf das Element angewendet werden.
Qt bietet die folgenden Standardeffekte:
- QGraphicsBlurEffect - verwischt das Element um einen angegebenen Radius
- QGraphicsDropShadowEffect - rendert einen Schlagschatten hinter dem Element
- QGraphicsColorizeEffect - rendert das Element in Schattierungen einer beliebigen Farbe
- QGraphicsOpacityEffect - rendert das Element mit einer Deckkraft
| |
|
|
|
|

Weitere Informationen zur Verwendung der einzelnen Effekte finden Sie in der Dokumentation des jeweiligen Effekts.
Um einen eigenen benutzerdefinierten Effekt zu erstellen, erstellen Sie eine Unterklasse von `QGraphicsEffect` (oder eines der anderen vorhandenen Effekte) und implementieren Sie die virtuelle Funktion ` draw()` neu. Diese Funktion wird immer dann aufgerufen, wenn der Effekt neu gezeichnet werden muss. Die Funktion ` draw()` nimmt den Painter, mit dem gezeichnet werden soll, als Argument entgegen. Weitere Informationen finden Sie in der Dokumentation zu ` draw()`. In der Funktion ` draw()` können Sie ` sourcePixmap()` aufrufen, um eine Pixmap der Quelle des Grafikeffekts abzurufen, die Sie anschließend weiterverarbeiten können.
Wenn sich Ihr Effekt ändert, verwenden Sie ` update()` (), um eine Neuzeichnung anzufordern. Wenn Ihr benutzerdefinierter Effekt das Begrenzungsrechteck der Quelle verändert – z. B. muss bei einem radialen Glüheffekt möglicherweise ein zusätzlicher Rand angewendet werden –, können Sie die virtuelle Funktion ` boundingRectFor()` () neu implementieren und ` updateBoundingRect()` () aufrufen, um das Framework zu benachrichtigen, sobald sich dieses Rechteck ändert. Die virtuelle Funktion ` sourceChanged()` wird aufgerufen, um die Effekte darüber zu informieren, dass sich die Quelle in irgendeiner Weise geändert hat – z. B. wenn es sich bei der Quelle um ein ` QGraphicsRectItem ` handelt und sich dessen Rechteckparameter geändert haben.
Siehe auch „ QGraphicsItem::setGraphicsEffect()“ und „ QWidget::setGraphicsEffect()“.
Dokumentation zu Mitgliedstypen
enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags
Diese Enumeration beschreibt, was sich bei QGraphicsEffectSource geändert hat.
| Konstante | Wert | Beschreibung |
|---|---|---|
QGraphicsEffect::SourceAttached | 0x1 | Der Effekt wird auf einer Quelle installiert. |
QGraphicsEffect::SourceDetached | 0x2 | Der Effekt wurde von einer Quelle entfernt. |
QGraphicsEffect::SourceBoundingRectChanged | 0x4 | Der Begrenzungsrahmen der Quelle hat sich geändert. |
QGraphicsEffect::SourceInvalidated | 0x8 | Das Erscheinungsbild der Quelle hat sich geändert. |
Der Typ „ChangeFlags“ ist ein „typedef“ für „QFlags<ChangeFlag>“. Er speichert eine ODER-Kombination von „ChangeFlag“-Werten.
enum QGraphicsEffect::PixmapPadMode
Diese Enumeration beschreibt, wie die von sourcePixmap zurückgegebene Pixmap aufgefüllt werden soll.
| Konstante | Wert | Beschreibung |
|---|---|---|
QGraphicsEffect::NoPad | 0 | Die Pixmap sollte nicht zusätzlich aufgefüllt werden. |
QGraphicsEffect::PadToTransparentBorder | 1 | Die Pixmap sollte aufgefüllt werden, um sicherzustellen, dass sie einen vollständig transparenten Rand hat. |
QGraphicsEffect::PadToEffectiveBoundingRect | 2 | Die Pixmap sollte so aufgefüllt werden, dass sie dem effektiven Begrenzungsrechteck des Effekts entspricht. |
Eigenschaftsdokumentation
enabled : bool
Diese Eigenschaft gilt unabhängig davon, ob der Effekt aktiviert ist oder nicht.
Ist ein Effekt deaktiviert, wird die Quelle wie gewohnt gerendert, ohne dass der Effekt eingreift. Ist der Effekt aktiviert, wird die Quelle unter Anwendung des Effekts gerendert.
Diese Eigenschaft ist standardmäßig aktiviert.
Mithilfe dieser Eigenschaft können Sie bestimmte Effekte auf langsamen Plattformen deaktivieren, um sicherzustellen, dass die Benutzeroberfläche reaktionsschnell bleibt.
Zugriffsfunktionen:
| bool | isEnabled() const |
| void | setEnabled(bool enable) |
Notifier-Signal:
| void | enabledChanged(bool enabled) |
Dokumentation der Mitgliedsfunktionen
QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)
Erstellt eine neue Instanz von `QGraphicsEffect` mit dem angegebenen ` parent`.
[virtual noexcept] QGraphicsEffect::~QGraphicsEffect()
Entfernt den Effekt aus der Quelle und löscht den Grafikeffekt.
QRectF QGraphicsEffect::boundingRect() const
Gibt das effektive Begrenzungsrechteck für diesen Effekt zurück, d. h. das Begrenzungsrechteck der Quelle in Gerätekoordinaten, angepasst um etwaige vom Effekt selbst angewendete Ränder.
Siehe auch boundingRectFor() und updateBoundingRect().
[virtual] QRectF QGraphicsEffect::boundingRectFor(const QRectF &rect) const
Gibt das effektive Begrenzungsrechteck für diesen Effekt zurück, basierend auf dem übergebenen „ rect “ in den Gerätekordinaten. Wenn Sie einen eigenen benutzerdefinierten Effekt erstellen, müssen Sie die Funktion „ updateBoundingRect()“ aufrufen, sobald Parameter geändert werden, die dazu führen könnten, dass diese Funktion einen anderen Wert zurückgibt.
Siehe auch ` sourceBoundingRect()`.
[pure virtual protected] void QGraphicsEffect::draw(QPainter *painter)
Diese rein virtuelle Funktion zeichnet den Effekt und wird immer dann aufgerufen, wenn die Quelle gezeichnet werden muss.
Implementieren Sie diese Funktion in einer Unterklasse von ` QGraphicsEffect ` neu, um die Zeichnungsimplementierung des Effekts bereitzustellen, und verwenden Sie dabei ` painter`.
Beispiel:
void 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);
}
//...
}Diese Funktion sollte vom Benutzer nicht explizit aufgerufen werden, da sie ausschließlich zur Neuimplementierung vorgesehen ist.
[protected] void QGraphicsEffect::drawSource(QPainter *painter)
Zeichnet die Quelle direkt unter Verwendung des angegebenen ` painter`.
Diese Funktion sollte nur von ` QGraphicsEffect::draw()` aus aufgerufen werden.
Beispiel:
void MyGraphicsOpacityEffect::draw(QPainter *painter)
{
// Fully opaque; draw directly without going through a pixmap.
if (qFuzzyCompare(m_opacity, 1)) {
drawSource(painter);
return;
}
//...
}Siehe auch ` QGraphicsEffect::draw()`.
[signal] void QGraphicsEffect::enabledChanged(bool enabled)
Dieses Signal wird immer dann ausgelöst, wenn der Effekt aktiviert oder deaktiviert wird. Der Parameter „ enabled “ enthält den neuen Aktivierungsstatus des Effekts.
Hinweis: Benachrichtigungssignal für die Eigenschaft „ enabled “.
Siehe auch „ isEnabled()“.
[protected] QRectF QGraphicsEffect::sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
Gibt das Begrenzungsrechteck der Quelle zurück, die auf die angegebene ` system` abgebildet wurde.
Der Aufruf dieser Funktion mit ` Qt::DeviceCoordinates ` außerhalb von ` QGraphicsEffect::draw()` führt zu undefinierten Ergebnissen, da kein Gerätekontext verfügbar ist.
Siehe auch ` draw()`.
[virtual protected] void QGraphicsEffect::sourceChanged(QGraphicsEffect::ChangeFlags flags)
Diese virtuelle Funktion wird von ` QGraphicsEffect ` aufgerufen, um dem Effekt mitzuteilen, dass sich die Quelle geändert hat. Wenn der Effekt einen Cache verwendet, muss dieser Cache geleert werden, damit die neue Darstellung der Quelle berücksichtigt wird.
Der ` flags ` beschreibt, was sich geändert hat.
[protected] bool QGraphicsEffect::sourceIsPixmap() const
Gibt „ true “ zurück, wenn die Quelle tatsächlich eine Pixmap ist, z. B. eine „ QGraphicsPixmapItem “.
Diese Funktion ist für Optimierungszwecke nützlich. Es macht beispielsweise keinen Sinn, die Quelle in Gerätekoodinaten zu zeichnen, um eine Skalierung der Pixmap zu vermeiden, wenn diese Funktion „ true “ zurückgibt – die Quell-Pixmap wird ohnehin skaliert.
[protected] QPixmap QGraphicsEffect::sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const
Gibt eine Pixmap zurück, in die die Quelle eingezeichnet wurde.
Der Parameter „ system “ legt fest, welches Koordinatensystem für die Quelle verwendet werden soll. Der optionale Parameter „ offset “ gibt den Versatz zurück, an dem die Pixmap mit dem aktuellen Painter gezeichnet werden soll. Um zu steuern, wie die Pixmap aufgefüllt wird, verwenden Sie den Parameter „ mode “.
Die zurückgegebene Pixmap wird auf das Geräte-Rechteck des aktuellen Painters zugeschnitten, wenn system den Wert Qt::DeviceCoordinates hat.
Der Aufruf dieser Funktion mit ` Qt::DeviceCoordinates ` außerhalb von ` QGraphicsEffect::draw()` führt zu undefinierten Ergebnissen, da kein Gerätekontext verfügbar ist.
Siehe auch ` draw()` und ` boundingRect()`.
[slot] void QGraphicsEffect::update()
Plant eine Neuzeichnung des Effekts. Rufen Sie diese Funktion immer dann auf, wenn der Effekt neu gezeichnet werden muss. Diese Funktion löst keine Neuzeichnung der Quelle aus.
Siehe auch „ updateBoundingRect()“.
[protected] void QGraphicsEffect::updateBoundingRect()
Diese Funktion benachrichtigt das Effekt-Framework, wenn sich das Begrenzungsrechteck des Effekts geändert hat. Als Autor eines benutzerdefinierten Effekts müssen Sie diese Funktion immer dann aufrufen, wenn Sie Parameter ändern, die dazu führen, dass die virtuelle Funktion ` boundingRectFor()` einen anderen Wert zurückgibt.
Diese Funktion ruft bei Bedarf ` update()` auf.
Siehe auch ` boundingRectFor()`, ` boundingRect()` und ` 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.




