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

Ö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:

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.

KonstanteWertBeschreibung
QGraphicsEffect::SourceAttached0x1Der Effekt wurde auf einer Quelle installiert.
QGraphicsEffect::SourceDetached0x2Der Effekt wurde in einer Quelle deinstalliert.
QGraphicsEffect::SourceBoundingRectChanged0x4Das Begrenzungsrechteck der Quelle hat sich geändert.
QGraphicsEffect::SourceInvalidated0x8Das 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.

KonstanteWertBeschreibung
QGraphicsEffect::NoPad0Die Pixmap sollte keine zusätzliche Auffüllung erhalten.
QGraphicsEffect::PadToTransparentBorder1Die Pixmap sollte aufgefüllt werden, um sicherzustellen, dass sie einen vollständig transparenten Rand hat.
QGraphicsEffect::PadToEffectiveBoundingRect2Die 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.