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
- fillColor : QColor
- renderTarget : RenderTarget
- textureSize : QSize
Ö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
void | fillColorChanged() |
void | renderTargetChanged() |
void | textureSizeChanged() |
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.
Konstante | Wert | Beschreibung |
---|---|---|
QQuickPaintedItem::FastFBOResizing | 0x1 | Ab 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.
Konstante | Wert | Beschreibung |
---|---|---|
QQuickPaintedItem::Image | 0 | Die 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::FramebufferObject | 1 | Ab Qt 6.0 wird dieser Wert ignoriert. |
QQuickPaintedItem::InvertedYFramebufferObject | 2 | Ab 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.