Auf dieser Seite

Shape QML Type

Zeigt einen Pfad an. Mehr...

Import Statement: import QtQuick.Shapes 1.12
Inherits:

Item

Inherited By:

EllipseShape and MaskShape

Eigenschaften

Ausführliche Beschreibung

Rendert einen Pfad durch Triangulierung der Geometrie aus einem „ QPainterPath “.

Dieser Ansatz unterscheidet sich vom Rendern von Formen über „ QQuickPaintedItem “ oder den 2D-Canvas, da der Pfad niemals softwaremäßig gerastert wird. Daher eignet sich „Shape“ zum Erstellen von Formen, die sich über größere Bereiche des Bildschirms erstrecken, wodurch Leistungseinbußen durch Textur-Uploads oder Framebuffer-Blits vermieden werden. Darüber hinaus ermöglicht die deklarative API das Bearbeiten, Binden und sogar Animieren der Eigenschaften von Pfadelementen wie Start- und Endposition, 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 keinen Sinn ergeben. Die derzeit von „Shape“ unterstützte Teilmenge umfasst: „ PathMove “, „ PathLine “, „ PathQuad “, „ PathCubic “, „ PathArc “, „ PathText “ und „ PathSvg “.

Eine detaillierte Übersicht über die unterstützten Pfadelemente finden Sie unter Path.

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 }
    }
}

Dreieck mit Regenbogen-Farbverlaufsfüllung und rotem gestricheltem Umriss

Wie unter Item beschrieben, ermöglicht auch „Shape“ die Deklaration beliebiger visueller oder nicht-visueller Objekte als untergeordnete Elemente. „ ShapePath “-Objekte werden dabei besonders behandelt. Dies ist nützlich, da es das Hinzufügen visueller Elemente wie Rectangle oder Image sowie nicht-visueller Objekte wie Timer direkt als untergeordnete Elemente von „Shape“ ermöglicht.

Die folgende Liste fasst die verfügbaren Rendering-Ansätze für „Shape“ zusammen:

  • Wenn Qt Quick mit dem standardmäßigen, hardwarebeschleunigten Backend (RHI) ausgeführt wird, kommt der generische Shape-Renderer zum Einsatz. Dieser wandelt die Shapes in Dreiecke um, die an den Renderer übergeben werden.
  • Das „ software “-Backend wird vollständig unterstützt. In diesem Fall wird der Pfad über „ QPainter::strokePath()“ und „ QPainter::fillPath()“ gerendert.
  • Das OpenVG-Backend wird derzeit nicht unterstützt.

Bei der Verwendung von „Shape“ ist es wichtig, sich der möglichen Auswirkungen auf die Leistung bewusst zu sein:

  • Wenn die Anwendung mit der generischen, auf Triangulation basierenden „Shape“-Implementierung läuft, erfolgt die Geometrieerzeugung vollständig auf der CPU. Dies kann rechenintensiv sein. Das Ändern der Pfadelemente, das Ändern der Eigenschaften dieser Elemente oder das Ändern bestimmter Eigenschaften der „Shape“-Objekte selbst führen bei jeder Änderung zu einer erneuten Triangulation der betroffenen Pfade. Daher kann das Anwenden von Animationen auf solche Eigenschaften die Leistung auf weniger leistungsstarken Systemen beeinträchtigen.
  • Allerdings bedeutet der datengesteuerte, deklarative Charakter der Shape-API oft eine bessere Cache-Effizienz für die zugrunde liegenden CPU- und GPU-Ressourcen. Eine Eigenschaftsänderung in einem „ ShapePath “ führt nur zur Neuverarbeitung der betroffenen „ ShapePath “, während andere Teile des Shapes unverändert bleiben. Daher kann eine sich häufig ändernde Eigenschaft dennoch zu einer geringeren Gesamtsystemauslastung führen als bei imperativen Zeichenansätzen (zum Beispiel QPainter).
  • Gleichzeitig muss auf die Anzahl der „Shape“-Elemente in der Szene geachtet werden. Die Art und Weise, wie ein solches „Shape“-Element im Szenengraphen dargestellt wird, unterscheidet sich von einem gewöhnlichen geometriebasierten Element und verursacht gewisse Kosten bei OpenGL-Zustandsänderungen.
  • Generell sollten Szenen die Verwendung separater „Shape“-Elemente vermeiden, sofern dies nicht unbedingt erforderlich ist. Verwenden Sie lieber ein „Shape“-Element mit mehreren „ ShapePath “-Elementen anstelle mehrerer „Shape“-Elemente.

Siehe auch „Qt Quick -Beispiele – Shapes“, „Beispiel zur Wettervorhersage“, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc und PathSvg.

Dokumentation zu Eigenschaften

asynchronous : bool

Wenn „ rendererType “ auf „ Shape.GeometryRenderer “ oder „ Shape.CurveRenderer “ gesetzt ist, wird während der Polierphase der Form eine gewisse Vorverarbeitung des Eingabepfads auf der CPU durchgeführt. Dies kann rechenintensiv sein. Um diese Arbeit auf separate Worker-Threads auszulagern, setzen Sie diese Eigenschaft auf „ true “.

Wenn diese Option aktiviert ist, wird beim Sichtbarmachen einer Form nicht darauf gewartet, bis der Inhalt verfügbar ist. Stattdessen wird der GUI-/Hauptthread nicht blockiert, und die Ergebnisse der Pfaddarstellung werden erst angezeigt, wenn alle asynchronen Vorgänge abgeschlossen sind.

Der Standardwert lautet „ false “.

boundingRect : rect [read-only, since 6.6]

Enthält das vereinigte Begrenzungsrechteck aller Teilpfade in der Form.

Diese Eigenschaft wurde in Qt 6.6 eingeführt.

containsMode : enumeration [since QtQuick.Shapes 1.11]

Diese Eigenschaft legt die Definition von ` contains()` für die Form fest. Sie ist nützlich, wenn Sie ` Qt Quick `-Eingabehandler hinzufügen und nur dann reagieren möchten, wenn sich die Maus oder der Berührungspunkt vollständig innerhalb der Form befindet.

KonstanteBeschreibung
Shape.BoundingRectContainsDie Standardimplementierung von ` QQuickItem::contains()` prüft lediglich, ob sich der angegebene Punkt innerhalb der rechteckigen Begrenzungsbox befindet. Dies ist die effizienteste Implementierung, weshalb sie als Standard festgelegt ist.
Shape.FillContainsPrüft, ob das Innere (der Teil, der gefüllt würde, wenn Sie ihn mit „fill“ rendern würden) eines beliebigen „ ShapePath “, aus dem diese „Shape“ besteht, den angegebenen Punkt enthält. Je komplexer und zahlreicher die hinzugefügten „ShapePaths“ sind, desto weniger effizient ist diese Prüfung, was möglicherweise die Ereignisübermittlung in Ihrer Anwendung verlangsamen kann. Daher sollte sie mit Bedacht eingesetzt werden.

Eine Möglichkeit, die „ FillContains “-Prüfung zu beschleunigen, besteht darin, einen ungefähren Umriss mit möglichst wenigen Punkten zu generieren, diesen in einer transparenten „Shape“ darüber zu platzieren und Ihre „Pointer Handler“ dort hinzuzufügen, sodass die „ “-Prüfung während der Ereignisübermittlung weniger Rechenaufwand erfordert.

Diese Eigenschaft wurde in QtQuick.Shapes 1.11 eingeführt.

data : list<Object> [default]

Diese Eigenschaft enthält die Objekte vom Typ „ ShapePath “, die den Inhalt der Form definieren. Sie kann auch Objekte anderer Typen enthalten, da bei „Shape“ – genau wie bei „Item“ – beliebige visuelle oder nicht-visuelle Objekte als untergeordnete Elemente hinzugefügt werden können.

fillMode : enumeration [since QtQuick.Shapes 6.7]

Legen Sie diese Eigenschaft fest, um zu definieren, was geschieht, wenn der Pfad eine andere Größe als das Element hat.

KonstanteBeschreibung
Shape.NoResizeDie Form wird in ihrer nativen Größe gerendert, unabhängig von der Größe des Elements. Dies ist die Standardeinstellung
Shape.StretchDie Form wird so skaliert, dass sie in das Element passt, wobei das Seitenverhältnis bei Bedarf angepasst wird. Beachten Sie, dass eine ungleichmäßige Skalierung bei Verwendung des Kurven-Renderers zu einer verminderten Qualität des Anti-Aliasing führen kann
Shape.PreserveAspectFitDie Form wird gleichmäßig skaliert, damit sie in das Element passt.
Shape.PreserveAspectCropDie Form wird gleichmäßig skaliert, um das Element vollständig auszufüllen, und ragt dabei bei Bedarf über die Grenzen des Elements hinaus. Beachten Sie, dass der Inhalt tatsächlich nur dann beschnitten wird, wenn „ clip “ auf „true“ gesetzt ist

Diese Eigenschaft wurde in QtQuick.Shapes 6.7 eingeführt.

horizontalAlignment : enumeration [since 6.7]

verticalAlignment : enumeration [since 6.7]

Legt die horizontale und vertikale Ausrichtung der Form innerhalb des Elements fest. Standardmäßig wird die Form anhand von „ (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 Eigenschaften wurden in Qt 6.7 eingeführt.

preferredRendererType : enumeration [since 6.6]

Legt ein bestimmtes Backend fest, das zum Rendern der Form verwendet werden soll. Die möglichen Werte entsprechen denen von ` rendererType`. Der Standardwert ist ` Shape.UnknownRenderer`, was bedeutet, dass keine bestimmte Präferenz angegeben wurde.

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 spiegelt sich bei der Initialisierung des Backends im „ rendererType “ wider.

Shape.SoftwareRenderer kann derzeit nicht ausgewählt werden, ohne den Szenengrafen mit dem „ software “-Backend auszuführen; in diesem Fall wird er unabhängig von „ preferredRendererType “ ausgewählt.

Weitere Informationen zu den Auswirkungen finden Sie unter „ rendererType “.

Diese Eigenschaft wurde in Qt 6.6 eingeführt.

rendererType : enumeration [read-only]

Diese Eigenschaft legt fest, welches Backend für die Pfaddarstellung aktiv ist.

KonstanteBeschreibung
Shape.UnknownRendererDer Renderer ist unbekannt.
Shape.GeometryRendererDie generische, treiberunabhängige Lösung für das GPU-Rendering. Verwendet denselben CPU-basierten Triangulationsansatz wie die OpenGL-2-Paint-Engine von QPainter. Dies ist die Standardeinstellung, wenn das RHI-basierte „ Qt Quick “-Scenegraph-Backend verwendet wird.
Shape.SoftwareRendererReines „ QPainter “-Zeichnen unter Verwendung der Raster-Paint-Engine. Dies ist die Standard- und einzige Option, wenn der „ Qt Quick “-Scenegraph mit dem „ software “-Backend ausgeführt wird.
Shape.CurveRendererGPU-basierter Renderer, der darauf abzielt, die Krümmung in jedem Maßstab beizubehalten. Im Gegensatz zu „ Shape.GeometryRenderer “ werden Kurven nicht durch kurze gerade Linien approximiert. Stattdessen werden Kurven mithilfe eines speziellen Fragment-Shaders gerendert. Dies verbessert die visuelle Qualität und vermeidet Leistungseinbußen durch Neutessellierung beim Zoomen. Außerdem bietet „ Shape.CurveRenderer “ natives, hochwertiges Anti-Aliasing ohne die Leistungseinbußen durch Multi- oder Supersampling.

Standardmäßig wird „ Shape.GeometryRenderer “ ausgewählt, es sei denn, der „ Qt Quick “-Szenengraph wird mit dem „ software “-Backend ausgeführt. In diesem Fall wird „ Shape.SoftwareRenderer “ verwendet. „ Shape.CurveRenderer “ kann über die Eigenschaft „ preferredRendererType “ angefordert werden.

Hinweis: Das „ Shape.CurveRenderer “ approximiert kubische Kurven mit quadratischen und kann daher geringfügig von der mathematisch korrekten Darstellung der Form abweichen. Wenn die Form zudem in eine „ Qt Quick 3D “-Szene gerendert wird und das OpenGL-Backend für RHI aktiv ist, ist die OpenGL-Erweiterung „ GL_OES_standard_derivatives “ erforderlich (diese ist standardmäßig in OpenGL ES 3 und höher verfügbar, in OpenGL ES 2 jedoch optional).

status : enumeration [read-only]

Diese Eigenschaft bestimmt den Status der Form und ist relevant, wenn „Shape.asynchronous“ auf „ true “ gesetzt ist.

KonstanteBeschreibung
Shape.NullNoch nicht initialisiert.
Shape.ReadyDie Form hat die Verarbeitung abgeschlossen.
Shape.ProcessingDer Pfad wird gerade verarbeitet.

vendorExtensionsEnabled : bool

Diese Eigenschaft steuert die Verwendung von nicht standardmäßigen OpenGL-Erweiterungen.

Der Standardwert lautet „ false “.

Ab Qt 6.0 sind keine herstellerspezifischen Rendering-Pfade implementiert.

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