QGraphicsEffect Class
Die Klasse QGraphicsEffect ist die Basisklasse für alle Grafikeffekte. Mehr...
Kopfzeile: | #include <QGraphicsEffect> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Vererbt: | QObject |
Vererbt von: | 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 Aussehen von Elementen, indem sie sich in die Rendering-Pipeline einklinken und zwischen der Quelle (z. B. QGraphicsPixmapItem) und dem Zielgerät (z. B. QGraphicsView's viewport) wirken. Effekte können durch den Aufruf von setEnabled(false) deaktiviert werden. Wenn Effekte deaktiviert sind, wird die Quelle direkt gerendert.
Um zum Beispiel einen visuellen Effekt zu QGraphicsItem hinzuzufügen, können Sie einen der Standardeffekte verwenden oder alternativ einen eigenen Effekt erstellen, indem Sie eine Unterklasse von QGraphicsEffect erstellen. Der Effekt kann dann mit QGraphicsItem::setGraphicsEffect() auf dem Element installiert werden.
Qt bietet die folgenden Standardeffekte:
- QGraphicsBlurEffect - verwischt das Objekt um einen bestimmten Radius
- QGraphicsDropShadowEffect - rendert einen Schlagschatten hinter dem Element
- QGraphicsColorizeEffect - Rendering des Objekts in Schattierungen einer bestimmten Farbe
- QGraphicsOpacityEffect - Rendering des Objekts mit einer Deckkraft
Weitere Informationen über die Verwendung der einzelnen Effekte finden Sie in der Dokumentation des jeweiligen Effekts.
Um einen eigenen Effekt zu erstellen, erstellen Sie eine Unterklasse von QGraphicsEffect (oder einem anderen existierenden Effekt) 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 Maler, mit dem gezeichnet werden soll, als Argument an. 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 zu erhalten, die Sie dann verarbeiten können.
Wenn sich Ihr Effekt ändert, verwenden Sie update(), um ein erneutes Zeichnen anzufordern. Wenn Ihr benutzerdefinierter Effekt das Begrenzungsrechteck der Quelle ändert, z. B. wenn ein radialer Glüheffekt einen zusätzlichen Rand benötigt, können Sie die virtuelle Funktion boundingRectFor() neu implementieren und updateBoundingRect() aufrufen, um das Framework zu benachrichtigen, wenn sich dieses Rechteck ändert. Die virtuelle Funktion sourceChanged() wird aufgerufen, um den Effekten mitzuteilen, dass sich die Quelle in irgendeiner Weise geändert hat - z. B. wenn die Quelle eine QGraphicsRectItem ist und sich ihre Rechteckparameter geändert haben.
Siehe auch QGraphicsItem::setGraphicsEffect() und QWidget::setGraphicsEffect().
Dokumentation der Mitgliedstypen
enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags
Diese Aufzählung beschreibt, was sich in QGraphicsEffectSource geändert hat.
Konstante | Wert | Beschreibung |
---|---|---|
QGraphicsEffect::SourceAttached | 0x1 | Der Effekt wurde auf einer Quelle installiert. |
QGraphicsEffect::SourceDetached | 0x2 | Der Effekt wurde in einer Quelle deinstalliert. |
QGraphicsEffect::SourceBoundingRectChanged | 0x4 | Das Begrenzungsrechteck der Quelle hat sich geändert. |
QGraphicsEffect::SourceInvalidated | 0x8 | Das visuelle 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 Aufzählung beschreibt, wie die von sourcePixmap zurückgegebene Pixmap aufgefüllt werden soll.
Konstante | Wert | Beschreibung |
---|---|---|
QGraphicsEffect::NoPad | 0 | Die Pixmap sollte keine zusätzliche Auffüllung erhalten. |
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. |
Dokumentation der Eigenschaft
enabled : bool
Diese Eigenschaft gibt an, ob der Effekt aktiviert ist oder nicht.
Wenn ein Effekt deaktiviert ist, wird die Quelle ganz normal gerendert, ohne dass der Effekt sie beeinflusst. Wenn der Effekt aktiviert ist, wird die Quelle mit dem Effekt gerendert.
Diese Eigenschaft ist standardmäßig aktiviert.
Mit dieser Eigenschaft können Sie bestimmte Effekte auf langsamen Plattformen deaktivieren, um sicherzustellen, dass die Benutzeroberfläche reaktionsschnell ist.
Zugriffsfunktionen:
bool | isEnabled() const |
void | setEnabled(bool enable) |
Benachrichtigungssignal:
void | enabledChanged(bool enabled) |
Member Function Dokumentation
QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)
Konstruiert eine neue QGraphicsEffect-Instanz mit dem angegebenen parent.
[virtual noexcept]
QGraphicsEffect::~QGraphicsEffect()
Entfernt den Effekt aus der Quelle und vernichtet 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 alle vom Effekt selbst angewendeten 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, unter Berücksichtigung der angegebenen rect in den Gerätekoordinaten. Wenn Sie Ihren eigenen benutzerdefinierten Effekt schreiben, müssen Sie updateBoundingRect() immer dann aufrufen, wenn 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.
Reimplementieren Sie diese Funktion in einer QGraphicsEffect Unterklasse, um die Zeichnungsimplementierung des Effekts bereitzustellen, indem Sie painter verwenden.
Ein Beispiel:
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 nicht explizit vom Benutzer aufgerufen werden, da sie nur für Reimplementierungszwecke gedacht ist.
[protected]
void QGraphicsEffect::drawSource(QPainter *painter)
Zeichnet die Quelle direkt unter Verwendung der angegebenen painter.
Diese Funktion sollte nur von QGraphicsEffect::draw() aus aufgerufen werden.
Ein Beispiel:
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 ausgegeben, 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 dem angegebenen system zugeordnet ist.
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 anwendet, muss dieser Cache geleert werden, um das neue Aussehen der Quelle wiederzugeben.
Die 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. QGraphicsPixmapItem.
Diese Funktion ist für Optimierungszwecke nützlich. Es macht zum Beispiel keinen Sinn, die Quelle in Gerätekoordinaten zu zeichnen, um die 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 ist.
Der Parameter system gibt an, welches Koordinatensystem für die Quelle verwendet werden soll. Der optionale Parameter offset gibt den Offset zurück, an dem die Pixmap unter Verwendung des aktuellen Painters gezeichnet werden soll. Mit dem Parameter mode wird festgelegt, wie die Pixmap aufgefüllt wird.
Die zurückgegebene Pixmap wird auf das Geräterechteck des aktuellen Painters beschnitten, wenn system gleich Qt::DeviceCoordinates ist.
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 ein erneutes Zeichnen des Effekts. Rufen Sie diese Funktion immer dann auf, wenn der Effekt neu gezeichnet werden muss. Diese Funktion löst kein erneutes Zeichnen 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 einen Parameter ändern, der dazu führt, dass die virtuelle Funktion boundingRectFor() einen anderen Wert zurückgibt.
Diese Funktion ruft update() auf, wenn dies notwendig ist.
Siehe auch boundingRectFor(), boundingRect(), und sourceBoundingRect().
© 2025 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.