Shape QML Type
Rendert einen Pfad. Mehr...
Import Statement: | import QtQuick.Shapes 1.8 |
Inherits: | |
Inherited By: |
Eigenschaften
- asynchronous : bool
- boundingRect : rect
(since 6.6)
- containsMode : enumeration
(since QtQuick.Shapes 1.11)
- data : list<Object>
- fillMode : enumeration
(since QtQuick.Shapes 6.7)
- horizontalAlignment : enumeration
(since 6.7)
- preferredRendererType : enumeration
(since 6.6)
- rendererType : enumeration
- status : enumeration
- vendorExtensionsEnabled : bool
- verticalAlignment : enumeration
(since 6.7)
Detaillierte Beschreibung
Rendert einen Pfad durch Triangulierung von Geometrie aus einem QPainterPath.
Dieser Ansatz unterscheidet sich vom Rendern von Formen über QQuickPaintedItem oder den 2D-Canvas, da der Pfad in der Software nie gerastert wird. Daher eignet sich Shape für die Erstellung von Formen, die sich über größere Bereiche des Bildschirms erstrecken, wodurch Leistungseinbußen bei Textur-Uploads oder Framebuffer-Blits vermieden werden. Darüber hinaus ermöglicht die deklarative API die Manipulation, Bindung und sogar Animation der Pfadelement-Eigenschaften wie Start- und Endposition, die Kontrollpunkte usw.
Die Typen zur Angabe von Pfadelementen werden von PathView und Shape gemeinsam genutzt. Allerdings unterstützen nicht alle Shape-Implementierungen alle Pfadelementtypen, während einige für PathView möglicherweise nicht sinnvoll sind. Die derzeit von Shape unterstützte Teilmenge ist: PathMove, PathLine, PathQuad, PathCubic, PathArc, PathText und PathSvg.
Unter Path finden Sie eine detaillierte Übersicht über die unterstützten Pfadelemente.
Shape { width: 200 height: 150 anchors.centerIn: parent ShapePath { strokeWidth: 4 strokeColor: "red" fillGradient: LinearGradient { x1: 20; y1: 20 x2: 180; y2: 130 GradientStop { position: 0; color: "blue" } GradientStop { position: 0.2; color: "green" } GradientStop { position: 0.4; color: "red" } GradientStop { position: 0.6; color: "yellow" } GradientStop { position: 1; color: "cyan" } } strokeStyle: ShapePath.DashLine dashPattern: [ 1, 4 ] startX: 20; startY: 20 PathLine { x: 180; y: 130 } PathLine { x: 20; y: 130 } PathLine { x: 20; y: 20 } } }
Wie Item erlaubt auch Shape die Deklaration beliebiger visueller oder nicht-visueller Objekte als Kinder. ShapePath Objekte werden besonders behandelt. Dies ist nützlich, da es das Hinzufügen von visuellen Elementen, wie Rectangle oder Image, und nicht-visuellen Objekten, wie Timer, direkt als Kinder von Shape ermöglicht.
Die folgende Liste fasst die verfügbaren Rendering-Ansätze von Shape zusammen:
- Wenn Qt Quick mit dem standardmäßigen, hardwarebeschleunigten Backend (RHI) ausgeführt wird, wird der generische Shape-Renderer verwendet. Dieser wandelt die Formen in Dreiecke um, die an den Renderer übergeben werden.
- Das
software
Backend wird vollständig unterstützt. Der Pfad wird in diesem Fall über QPainter::strokePath() und QPainter::fillPath() gerendert. - Das OpenVG-Backend wird derzeit nicht unterstützt.
Bei der Verwendung von Shape ist es wichtig, sich über mögliche Auswirkungen auf die Leistung im Klaren zu sein:
- Wenn die Anwendung mit der generischen, auf Triangulation basierenden Shape-Implementierung ausgeführt wird, erfolgt die Geometrieerzeugung vollständig auf der CPU. Dies ist potenziell teuer. Das Ändern des Satzes von Pfadelementen, das Ändern der Eigenschaften dieser Elemente oder das Ändern bestimmter Eigenschaften des Shapes selbst führt bei jeder Änderung zu einer erneuten Triangulation der betroffenen Pfade. Daher kann die Anwendung der Animation auf solche Eigenschaften die Leistung auf weniger leistungsfähigen Systemen beeinträchtigen.
- Die datengesteuerte, deklarative Natur der Shape-API bedeutet jedoch oft eine bessere Cachefähigkeit für die zugrunde liegenden CPU- und GPU-Ressourcen. Eine Eigenschaftsänderung in einem ShapePath führt nur zu einer erneuten Verarbeitung der betroffenen ShapePath, wobei andere Teile des Shapes unverändert bleiben. Daher kann eine sich häufig ändernde Eigenschaft immer noch zu einer geringeren Gesamtsystemlast führen als bei imperativen Malansätzen (z. B. QPainter).
- Gleichzeitig muss auf die Anzahl der Shape-Elemente in der Szene geachtet werden. Die Art und Weise, wie ein solches Shape-Element im Szenegraphen dargestellt wird, unterscheidet sich von einem gewöhnlichen geometriebasierten Element und verursacht gewisse Kosten, wenn es um OpenGL-Zustandsänderungen geht.
- Generell sollten Szenen keine separaten Shape-Elemente verwenden, wenn dies nicht unbedingt notwendig ist. Verwenden Sie lieber ein Shape-Element mit mehreren ShapePath Elementen als mehrere Shape-Elemente.
Siehe auch Qt Quick Beispiele - Shapes, Wettervorhersage Beispiel, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc und PathSvg.
Dokumentation der Eigenschaft
horizontalAlignment : enumeration |
verticalAlignment : enumeration |
Legt die horizontale und vertikale Ausrichtung der Form innerhalb des Elements fest. Standardmäßig wird die Form mit (0,0)
an der oberen linken Ecke ausgerichtet.
Die gültigen Werte für horizontalAlignment
sind Shape.AlignLeft
, Shape.AlignRight
und Shape.AlignHCenter
. Die gültigen Werte für verticalAlignment
sind Shape.AlignTop
, Shape.AlignBottom
und Shape.AlignVCenter
.
Diese QML-Eigenschaft wurde in Qt 6.7 eingeführt.
asynchronous : bool |
Wenn rendererType Shape.GeometryRenderer
oder Shape.CurveRenderer
ist, wird während der Polishing-Phase des Shapes eine gewisse Vorverarbeitung des Eingabepfads auf der CPU durchgeführt. Dies ist potenziell teuer. Um diese Arbeit auf separate Worker-Threads zu verlagern, setzen Sie diese Eigenschaft auf true
.
Wenn diese Eigenschaft aktiviert ist, wird beim Sichtbarmachen eines Shapes nicht darauf gewartet, dass der Inhalt verfügbar wird. Stattdessen wird der GUI/Hauptthread nicht blockiert, und die Ergebnisse der Pfaddarstellung werden erst angezeigt, wenn die gesamte asynchrone Arbeit abgeschlossen ist.
Der Standardwert ist false
.
boundingRect : rect |
Enthält die vereinigten Begrenzungsrechtecke aller Unterpfade in der Form.
Diese Eigenschaft wurde in Qt 6.6 eingeführt.
containsMode : enumeration |
Diese Eigenschaft bestimmt die Definition von contains() für das Shape. Sie ist nützlich, wenn Sie Qt Quick Input Handler hinzufügen und nur reagieren wollen, wenn sich die Maus oder der Touchpoint vollständig innerhalb des Shapes befindet.
Konstante | Beschreibung |
---|---|
Shape.BoundingRectContains | Die Standardimplementierung von QQuickItem::contains() prüft nur, ob sich der angegebene Punkt innerhalb der rechteckigen Bounding Box befindet. Dies ist die effizienteste Implementierung, weshalb sie auch die Standardeinstellung ist. |
Shape.FillContains | Es wird geprüft, ob das Innere (der Teil, der gefüllt werden würde, wenn man ihn mit Füllung rendert) eines beliebigen ShapePath, aus dem dieses Shape besteht, den angegebenen Punkt enthält. Je komplexer und zahlreicher die ShapePaths sind, die Sie hinzufügen, desto weniger effizient ist diese Prüfung, was die Ereignisausgabe in Ihrer Anwendung möglicherweise verlangsamen kann. Daher sollte diese Funktion mit Bedacht eingesetzt werden. |
Eine Möglichkeit, die Prüfung von FillContains
zu beschleunigen, besteht darin, eine ungefähre Kontur mit so wenigen Punkten wie möglich zu erzeugen, diese in einem transparenten Shape darüber zu platzieren und Ihre Pointer Handler dazu hinzuzufügen, so dass die Prüfung der Eingrenzung während der Ereignisauslieferung günstiger ist.
Diese Eigenschaft wurde in QtQuick.Shapes 1.11 eingeführt.
data : list<Object> |
Diese Eigenschaft enthält die ShapePath Objekte, die den Inhalt des Shapes definieren. Sie kann auch jede andere Art von Objekten enthalten, da Shape, wie Item, das Hinzufügen beliebiger visueller oder nicht-visueller Objekte als Kinder erlaubt.
fillMode : enumeration |
Legen Sie diese Eigenschaft fest, um zu definieren, was passiert, wenn der Pfad eine andere Größe hat als das Item.
Konstante | Beschreibung |
---|---|
Shape.NoResize | wird die Form in ihrer ursprünglichen Größe gerendert, unabhängig von der Größe des Elements. Dies ist die Voreinstellung |
Shape.Stretch | Die Form wird skaliert, um sie an das Element anzupassen, wobei das Seitenverhältnis gegebenenfalls geändert wird. Beachten Sie, dass eine ungleichmäßige Skalierung bei Verwendung des Kurvenrenderers zu einer verminderten Qualität des Anti-Aliasings führen kann |
Shape.PreserveAspectFit | die Form wird einheitlich skaliert, damit sie in den Artikel passt |
Shape.PreserveAspectCrop | die Form wird gleichmäßig skaliert, um den Artikel vollständig auszufüllen, und gegebenenfalls über den Artikel hinaus verlängert. Beachten Sie, dass der Inhalt nur dann tatsächlich beschnitten wird, wenn clip true ist. |
Diese Eigenschaft wurde in QtQuick.Shapes 6.7 eingeführt.
preferredRendererType : enumeration |
Fordert ein bestimmtes Backend an, das für das Rendern der Form verwendet werden soll. Die möglichen Werte sind die gleichen wie für rendererType. Der Standardwert ist Shape.UnknownRenderer
, was keine besondere Präferenz anzeigt.
Wenn der angeforderte Renderer-Typ für das aktuelle Qt Quick Backend nicht unterstützt wird, wird stattdessen der Standard-Renderer für dieses Backend verwendet. Dies wird in der rendererType wiedergegeben, wenn das Backend initialisiert wird.
Shape.SoftwareRenderer
kann derzeit nicht ausgewählt werden, ohne dass der Scenegraph mit dem software
Backend ausgeführt wird; in diesem Fall wird er unabhängig von preferredRendererType
ausgewählt.
Siehe rendererType für weitere Informationen zu den Auswirkungen.
Diese Eigenschaft wurde in Qt 6.6 eingeführt.
rendererType : enumeration |
Diese Eigenschaft bestimmt, welches Pfad-Rendering-Backend aktiv ist.
Konstante | Beschreibung |
---|---|
Shape.UnknownRenderer | Der Renderer ist unbekannt. |
Shape.GeometryRenderer | Die generische, treiberunabhängige Lösung für GPU-Rendering. Verwendet den gleichen CPU-basierten Triangulationsansatz wie QPainter's OpenGL 2 Paint Engine. Dies ist der Standard, wenn das RHI-basierte Qt Quick Scenegraph Backend verwendet wird. |
Shape.SoftwareRenderer | Reines QPainter Zeichnen unter Verwendung der Raster Paint Engine. Dies ist die Standardeinstellung und die einzige Option, wenn der Qt Quick -Szenegraph mit dem software -Backend ausgeführt wird. |
Shape.CurveRenderer | GPU-basierter Renderer, der darauf abzielt, Krümmungen in jedem Maßstab zu erhalten. Im Gegensatz zu Shape.GeometryRenderer werden Kurven nicht durch kurze gerade Linien approximiert. Stattdessen werden die Kurven mit einem speziellen Fragment-Shader gerendert. Dies verbessert die visuelle Qualität und vermeidet Leistungseinbußen bei der Re-Tesselierung beim Zoomen. Außerdem bietet Shape.CurveRenderer natives Anti-Aliasing in hoher Qualität, ohne die Leistungseinbußen durch Multi- oder Supersampling. |
Standardmäßig wird Shape.GeometryRenderer
ausgewählt, es sei denn, der Qt Quick Szenegraph wird mit dem software
Backend ausgeführt. In diesem Fall wird Shape.SoftwareRenderer
verwendet. Shape.CurveRenderer
kann über die Eigenschaft preferredRendererType angefordert werden.
Hinweis: Shape.CurveRenderer
approximiert kubische Kurven mit quadratischen Kurven und kann daher leicht von der mathematisch korrekten Darstellung der Form abweichen. Wenn die Form in eine Qt Quick 3D -Szene gerendert wird und das OpenGL-Backend für RHI aktiv ist, ist außerdem die GL_OES_standard_derivatives
-Erweiterung für OpenGL erforderlich (diese ist bei OpenGL ES 3 und höher standardmäßig verfügbar, bei OpenGL ES 2 jedoch optional).
status : enumeration |
Diese Eigenschaft bestimmt den Status des Shapes und ist relevant, wenn Shape.asynchronous auf true
gesetzt ist.
Konstante | Beschreibung |
---|---|
Shape.Null | Noch nicht initialisiert. |
Shape.Ready | Das Shape hat die Verarbeitung beendet. |
Shape.Processing | Der Pfad wird gerade verarbeitet. |
vendorExtensionsEnabled : bool |
Diese Eigenschaft steuert die Verwendung von nicht standardmäßigen OpenGL-Erweiterungen.
Der Standardwert ist false
.
Seit Qt 6.0 sind keine herstellerspezifischen Rendering-Pfade mehr implementiert.
© 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.