QQuickPaintedItem Class

Die Klasse QQuickPaintedItem bietet eine Möglichkeit, die QPainter API im QML Scene Graph zu verwenden. Mehr...

Kopfzeile: #include <QQuickPaintedItem>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
Vererbungen: QQuickItem

Öffentliche Typen

enum PerformanceHint { FastFBOResizing }
flags PerformanceHints
enum RenderTarget { Image, FramebufferObject, InvertedYFramebufferObject }

Eigenschaften

Öffentliche Funktionen

QQuickPaintedItem(QQuickItem *parent = nullptr)
virtual ~QQuickPaintedItem() override
bool antialiasing() const
QColor fillColor() const
bool mipmap() const
bool opaquePainting() const
virtual void paint(QPainter *painter) = 0
QQuickPaintedItem::PerformanceHints performanceHints() const
QQuickPaintedItem::RenderTarget renderTarget() const
void setAntialiasing(bool enable)
void setFillColor(const QColor &)
void setMipmap(bool enable)
void setOpaquePainting(bool opaque)
void setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true)
void setPerformanceHints(QQuickPaintedItem::PerformanceHints hints)
void setRenderTarget(QQuickPaintedItem::RenderTarget target)
void setTextureSize(const QSize &size)
QSize textureSize() const
void update(const QRect &rect = QRect())

Reimplementierte öffentliche Funktionen

virtual bool isTextureProvider() const override
virtual QSGTextureProvider *textureProvider() const override

Signale

Reimplementierte geschützte Funktionen

virtual void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) override
virtual void releaseResources() override
virtual QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override

Detaillierte Beschreibung

QQuickPaintedItem ermöglicht es, die QPainter API mit dem QML Scene Graph zu verwenden. Es erstellt ein texturiertes Rechteck im Scene Graph und benutzt eine QPainter um auf die Textur zu malen. Das Rendering-Ziel in Qt 6 ist immer ein QImage. Wenn das Rendering-Ziel ein QImage ist, wird QPainter zuerst in das Bild gerendert und dann der Inhalt in die Textur hochgeladen. Rufen Sie update() auf, um ein Repaint auszulösen.

Um QPainter zu aktivieren, um Anti-Aliasing-Rendering zu machen, verwenden Sie setAntialiasing().

Um Ihr eigenes gezeichnetes Element zu schreiben, erstellen Sie zunächst eine Unterklasse von QQuickPaintedItem und beginnen dann mit der Implementierung der einzigen rein virtuellen öffentlichen Funktion: paint(), die das eigentliche Zeichnen implementiert. Das Bild wird innerhalb des Rechtecks gemalt, das sich von 0,0 bis width(),height() erstreckt.

Hinweis: Es ist wichtig, die Auswirkungen auf die Leistung zu verstehen, die solche Elemente haben können. Siehe QQuickPaintedItem::RenderTarget und QQuickPaintedItem::renderTarget.

Siehe auch Scene Graph - Painted Item und Writing QML Extensions with C++.

Dokumentation der Mitgliedstypen

enum QQuickPaintedItem::PerformanceHint
flags QQuickPaintedItem::PerformanceHints

Diese Aufzählung beschreibt Flags, die Sie aktivieren können, um die Rendering-Leistung in QQuickPaintedItem zu verbessern. Standardmäßig ist keines dieser Flags gesetzt.

KonstanteWertBeschreibung
QQuickPaintedItem::FastFBOResizing0x1Ab Qt 6.0 wird dieser Wert ignoriert.

Der Typ PerformanceHints ist ein Typedef für QFlags<PerformanceHint>. Er speichert eine ODER-Kombination von PerformanceHint-Werten.

enum QQuickPaintedItem::RenderTarget

Diese Aufzählung beschreibt die Renderziele von QQuickPaintedItem. Das Rendering-Ziel ist die Oberfläche, auf die QPainter malt, bevor das Element auf dem Bildschirm gerendert wird.

KonstanteWertBeschreibung
QQuickPaintedItem::Image0Die Standardeinstellung; QPainter malt mit der Rasterpainting-Engine in ein QImage. Der Inhalt des Bildes muss anschließend in den Grafikspeicher hochgeladen werden, was bei großen Objekten sehr langsam sein kann. Dieses Rendering-Ziel ermöglicht hochwertiges Anti-Aliasing und eine schnelle Größenänderung von Objekten.
QQuickPaintedItem::FramebufferObject1Ab Qt 6.0 wird dieser Wert ignoriert.
QQuickPaintedItem::InvertedYFramebufferObject2Ab Qt 6.0 wird dieser Wert nicht mehr berücksichtigt.

Siehe auch setRenderTarget().

Dokumentation der Eigenschaft

fillColor : QColor

Diese Eigenschaft enthält die Hintergrundfüllfarbe des Elements.

Standardmäßig ist die Füllfarbe auf Qt::transparent eingestellt.

Setzen Sie die Füllfarbe auf eine ungültige Farbe (z. B. QColor()), um die Hintergrundfüllung zu deaktivieren. Dies kann die Leistung verbessern und ist sicher, wenn die Funktion paint() auf alle Pixel in jedem Frame zeichnet.

Zugriffsfunktionen:

QColor fillColor() const
void setFillColor(const QColor &)

Benachrichtigungssignal:

void fillColorChanged()

renderTarget : RenderTarget

Diese Eigenschaft enthält das Rendering-Ziel des Objekts.

Diese Eigenschaft legt fest, in welches Rendering-Ziel QPainter gerendert wird. Es kann entweder QQuickPaintedItem::Image, QQuickPaintedItem::FramebufferObject oder QQuickPaintedItem::InvertedYFramebufferObject sein.

Jedes hat bestimmte Vorteile, typischerweise Leistung gegenüber Qualität. Die Verwendung eines Framebuffer-Objekts vermeidet das kostspielige Hochladen des Bildinhalts in die Textur im Grafikspeicher, während die Verwendung eines Bildes hochwertiges Anti-Aliasing ermöglicht.

Achtung! Die Größenänderung eines Framebuffer-Objekts ist ein kostspieliger Vorgang. Vermeiden Sie die Verwendung des Renderziels QQuickPaintedItem::FramebufferObject, wenn die Größe des Objekts häufig geändert wird.

Standardmäßig ist das Rendering-Ziel QQuickPaintedItem::Image.

Zugriffsfunktionen:

QQuickPaintedItem::RenderTarget renderTarget() const
void setRenderTarget(QQuickPaintedItem::RenderTarget target)

Benachrichtigungssignal:

void renderTargetChanged()

textureSize : QSize

Bestimmt die Größe der Textur.

Das Ändern der Größe der Textur hat keinen Einfluss auf das in paint() verwendete Koordinatensystem. Stattdessen wird ein Skalierungsfaktor angewendet, so dass das Malen immer noch innerhalb von 0,0 bis width(),height() stattfinden sollte.

Standardmäßig hat die Texturgröße die gleiche Größe wie das Objekt.

Hinweis: Befindet sich das Element auf einem Fenster mit einem Gerätepixelverhältnis ungleich 1, wird dieser Skalierungsfaktor implizit auf die Texturgröße angewendet.

Zugriffsfunktionen:

QSize textureSize() const
void setTextureSize(const QSize &size)

Benachrichtigungssignal:

void textureSizeChanged()

Member Function Dokumentation

[explicit] QQuickPaintedItem::QQuickPaintedItem(QQuickItem *parent = nullptr)

Konstruiert ein QQuickPaintedItem mit dem angegebenen parent item.

[override virtual noexcept] QQuickPaintedItem::~QQuickPaintedItem()

Zerstört die QQuickPaintedItem.

bool QQuickPaintedItem::antialiasing() const

Gibt true zurück, wenn die Antialiasing-Malerei aktiviert ist; andernfalls wird false zurückgegeben.

Standardmäßig ist das Antialiasing nicht aktiviert.

Siehe auch setAntialiasing().

[override virtual] bool QQuickPaintedItem::isTextureProvider() const

Reimplements: QQuickItem::isTextureProvider() const.

[override virtual protected] void QQuickPaintedItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)

Reimplements: QQuickItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value).

bool QQuickPaintedItem::mipmap() const

Gibt true zurück, wenn Mipmaps aktiviert sind; andernfalls wird false zurückgegeben.

Standardmäßig ist Mipmapping nicht aktiviert.

Siehe auch setMipmap().

bool QQuickPaintedItem::opaquePainting() const

Gibt true zurück, wenn dieses Element undurchsichtig ist; andernfalls wird false zurückgegeben.

Standardmäßig sind gemalte Elemente nicht undurchsichtig.

Siehe auch setOpaquePainting().

[pure virtual] void QQuickPaintedItem::paint(QPainter *painter)

Diese Funktion, die normalerweise vom QML Scene Graph aufgerufen wird, malt den Inhalt eines Elements in lokalen Koordinaten.

Die zugrundeliegende Textur hat eine Größe, die durch textureSize definiert ist, wenn sie gesetzt ist, oder die Größe des Elements, multipliziert mit dem Pixelverhältnis des Fensters.

Die Funktion wird aufgerufen, nachdem das Element mit der fillColor gefüllt wurde.

Reimplementieren Sie diese Funktion in einer QQuickPaintedItem Unterklasse, um die Malimplementierung des Elements bereitzustellen, indem Sie painter verwenden.

Hinweis: Der QML Scene Graph verwendet zwei separate Threads, der Hauptthread erledigt Dinge wie die Verarbeitung von Ereignissen oder die Aktualisierung von Animationen, während ein zweiter Thread die eigentliche Ausgabe von Aktualisierungen der Grafikressourcen und die Aufzeichnung von Zeichenaufrufen übernimmt. Dies hat zur Folge, dass paint() nicht vom Haupt-GUI-Thread, sondern vom GL-fähigen Renderer-Thread aufgerufen wird. In dem Moment, in dem paint() aufgerufen wird, ist der GUI-Thread blockiert, und dies ist daher thread-sicher.

Warnung: Äußerste Vorsicht ist geboten, wenn Sie innerhalb dieser Funktion QObjects erstellen, Signale aussenden, Timer starten und ähnliches, da diese eine Affinität zum Rendering-Thread haben werden.

Siehe auch width(), height(), und textureSize.

QQuickPaintedItem::PerformanceHints QQuickPaintedItem::performanceHints() const

Gibt die Performance-Hinweise zurück.

Standardmäßig ist kein Performance-Hinweis aktiviert.

Siehe auch setPerformanceHint() und setPerformanceHints().

[override virtual protected] void QQuickPaintedItem::releaseResources()

Reimplements: QQuickItem::releaseResources().

void QQuickPaintedItem::setAntialiasing(bool enable)

Wenn enable true ist, ist die Antialiasing-Malerei aktiviert.

Standardmäßig ist die Antialiasing-Funktion nicht aktiviert.

Siehe auch antialiasing().

void QQuickPaintedItem::setMipmap(bool enable)

Wenn enable true ist, wird Mipmapping für die zugehörige Textur aktiviert.

Mipmapping erhöht die Rendering-Geschwindigkeit und reduziert Aliasing-Artefakte, wenn das Objekt verkleinert wird.

Standardmäßig ist Mipmapping nicht aktiviert.

Siehe auch mipmap().

void QQuickPaintedItem::setOpaquePainting(bool opaque)

Wenn opaque true ist, ist das Element undurchsichtig; andernfalls wird es als durchscheinend betrachtet.

Undurchsichtige Objekte werden nicht mit dem Rest der Szene überblendet. Sie sollten dies auf true setzen, wenn der Inhalt des Objekts undurchsichtig ist, um das Rendern zu beschleunigen.

Standardmäßig sind gemalte Objekte nicht undurchsichtig.

Siehe auch opaquePainting().

void QQuickPaintedItem::setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true)

Setzt den angegebenen Leistungshinweis hint auf das Element, wenn enabled wahr ist; andernfalls wird der Leistungshinweis gelöscht.

Standardmäßig ist kein Performance-Hinweis aktiviert/

Siehe auch setPerformanceHints() und performanceHints().

void QQuickPaintedItem::setPerformanceHints(QQuickPaintedItem::PerformanceHints hints)

Setzt die Leistungshinweise auf hints

Standardmäßig ist kein Performance-Hinweis aktiviert/

Siehe auch setPerformanceHint() und performanceHints().

[override virtual] QSGTextureProvider *QQuickPaintedItem::textureProvider() const

Reimplements: QQuickItem::textureProvider() const.

void QQuickPaintedItem::update(const QRect &rect = QRect())

Plant ein erneutes Zeichnen des von rect abgedeckten Bereichs in diesem Artikel. Sie können diese Funktion immer dann aufrufen, wenn Ihr Element neu gezeichnet werden muss, z. B. wenn es sein Aussehen oder seine Größe ändert.

Diese Funktion führt nicht zu einem sofortigen Zeichnen, sondern plant eine Zeichnungsanforderung, die vom QML Scene Graph verarbeitet wird, wenn das nächste Bild gerendert wird. Das Element wird nur neu gezeichnet, wenn es sichtbar ist.

Siehe auch paint().

[override virtual protected] QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data)

Reimplements: QQuickItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData).

© 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.