Shape QML Type
Renderiza una ruta. Más...
| Import Statement: | import QtQuick.Shapes 1.11 |
| Inherits: | |
| Inherited By: |
Propiedades
- 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)
Descripción detallada
Renderiza un camino triangulando la geometría desde QPainterPath.
Este enfoque es diferente de la representación de formas a través de QQuickPaintedItem o el lienzo 2D porque la ruta nunca se rasteriza en el software. Por lo tanto, Shape es adecuado para crear formas que se extienden sobre áreas más grandes de la pantalla, evitando la penalización de rendimiento por cargas de texturas o framebuffer blits. Además, la API declarativa permite manipular, vincular e incluso animar las propiedades de los elementos del trazado, como la posición inicial y final, los puntos de control, etc.
Los tipos para especificar elementos de trayectoria se comparten entre PathView y Shape. Sin embargo, no todas las implementaciones de Shape admiten todos los tipos de elementos de ruta, y algunos pueden no tener sentido para PathView. El subconjunto actualmente soportado por Shape es: PathMove, PathLine, PathQuad, PathCubic, PathArc, PathText y PathSvg.
Consulte Path para obtener una descripción detallada de los elementos de ruta admitidos.
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 } } }

Al igual que Item, Shape también permite declarar como hijos cualquier objeto visual o no visual. Los objetos ShapePath se tratan de forma especial. Esto es útil ya que permite añadir elementos visuales, como Rectangle o Image, y objetos no visuales, como Timer directamente como hijos de Shape.
La siguiente lista resume los enfoques de renderizado de Shape disponibles:
- Cuando Qt Quick se ejecuta con el backend por defecto, acelerado por hardware (RHI), se utilizará el renderizador genérico de formas. Esto convierte las formas en triángulos que se pasan al renderizador.
- El backend
softwarees totalmente compatible. La ruta se renderiza a través de QPainter::strokePath() y QPainter::fillPath() en este caso. - El backend OpenVG no está soportado actualmente.
Cuando se utiliza Shape, es importante ser consciente de las posibles implicaciones en el rendimiento:
- Cuando la aplicación se ejecuta con la implementación genérica Shape basada en triangulación, la generación de la geometría se realiza completamente en la CPU. Esto es potencialmente costoso. Cambiar el conjunto de elementos de la ruta, cambiar las propiedades de estos elementos, o cambiar ciertas propiedades de la propia forma, conlleva la retriangulación de las rutas afectadas en cada cambio. Por lo tanto, la aplicación de la animación a estas propiedades puede afectar al rendimiento de los sistemas menos potentes.
- Sin embargo, la naturaleza declarativa y basada en datos de la API Shape suele implicar una mayor capacidad de almacenamiento en caché para los recursos de CPU y GPU subyacentes. Un cambio de propiedad en un ShapePath sólo llevará a reprocesar el ShapePath afectado, dejando otras partes de la Shape sin cambios. Por lo tanto, una propiedad que cambie con frecuencia puede dar lugar a una menor carga global del sistema que con los enfoques de pintura imperativos (por ejemplo, QPainter).
- Al mismo tiempo, hay que prestar atención al número de elementos Shape en la escena. La forma en que un elemento Shape de este tipo se representa en el gráfico de la escena es diferente a la de un elemento basado en geometría ordinaria, e incurre en un cierto coste cuando se trata de cambios de estado de OpenGL.
- Como regla general, las escenas deben evitar el uso de elementos Shape separados cuando no sea absolutamente necesario. Es preferible utilizar un elemento Shape con varios elementos ShapePath en lugar de varios elementos Shape.
Ver también Qt Quick Ejemplos - Shapes, Ejemplo de Pronóstico del Tiempo, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc, y PathSvg.
Documentación de propiedades
asynchronous : bool
Cuando rendererType es Shape.GeometryRenderer o Shape.CurveRenderer, se realiza una cierta cantidad de preprocesamiento de la ruta de entrada en la CPU durante la fase de pulido de la Forma. Esto es potencialmente costoso. Para descargar este trabajo a hilos de trabajo separados, establezca esta propiedad a true.
Cuando está activada, al hacer visible una forma no se espera a que el contenido esté disponible. En su lugar, el subproceso GUI/principal no se bloquea y los resultados del renderizado de la ruta sólo se muestran cuando todo el trabajo asíncrono ha finalizado.
El valor por defecto es false.
boundingRect : rect [read-only, since 6.6]
Contiene el rectángulo delimitador unido de todas las subtrayectorias de la forma.
Esta propiedad se introdujo en Qt 6.6.
containsMode : enumeration [since QtQuick.Shapes 1.11]
Esta propiedad determina la definición de contains() para la figura. Es útil en caso de que añadas Qt Quick Input Handlers y quieras reaccionar sólo cuando el ratón o el touchpoint esté completamente dentro del Shape.
| Constante | Descripción |
|---|---|
Shape.BoundingRectContains | La implementación por defecto de QQuickItem::contains() sólo comprueba si el punto dado está dentro de la caja rectangular. Esta es la implementación más eficiente, por eso es la predeterminada. |
Shape.FillContains | Comprueba si el interior (la parte que se rellenaría si se está renderizando con relleno) de cualquier ShapePath que componga esta Shape contiene el punto dado. Cuanto más complejos y numerosos sean los ShapePaths que añadas, menos eficiente será esta comprobación, lo que puede ralentizar potencialmente la entrega de eventos en tu aplicación. Por lo tanto, debe utilizarse con cuidado. |
Una forma de acelerar la comprobación de FillContains es generar un contorno aproximado con el menor número de puntos posible, colocarlo en un Shape transparente encima, y añadir tus Manejadores de Puntero a eso, de forma que la comprobación de contención sea más barata durante la entrega de eventos.
Esta propiedad se introdujo en QtQuick.Shapes 1.11.
data : list<Object> [default]
Esta propiedad contiene los objetos ShapePath que definen el contenido de la Shape. También puede contener cualquier otro tipo de objetos, ya que Shape, al igual que Item, permite añadir cualquier objeto visual o no visual como hijo.
fillMode : enumeration [since QtQuick.Shapes 6.7]
Establezca esta propiedad para definir lo que ocurre cuando la ruta tiene un tamaño diferente al del elemento.
| Constante | Descripción |
|---|---|
Shape.NoResize | la forma se renderiza a su tamaño nativo, independientemente del tamaño del ítem. Este es el valor por defecto |
Shape.Stretch | la forma se escala para ajustarse al elemento, cambiando la relación de aspecto si es necesario. Tenga en cuenta que un escalado no uniforme puede reducir la calidad del antialiasing cuando se utiliza el renderizador de curvas. |
Shape.PreserveAspectFit | la forma se escala uniformemente para ajustarse al interior del elemento |
Shape.PreserveAspectCrop | la forma se escala uniformemente para llenar el elemento completamente, extendiéndose fuera del elemento si es necesario. Tenga en cuenta que esto sólo recorta el contenido si clip es verdadero. |
Esta propiedad se introdujo en QtQuick.Shapes 6.7.
Establece la alineación horizontal y vertical de la forma dentro del elemento. Por defecto, la forma se alinea con (0,0) en la esquina superior izquierda.
Los valores válidos para horizontalAlignment son Shape.AlignLeft, Shape.AlignRight y Shape.AlignHCenter. Los valores válidos para verticalAlignment son Shape.AlignTop, Shape.AlignBottom y Shape.AlignVCenter.
Estas propiedades se introdujeron en Qt 6.7.
preferredRendererType : enumeration [since 6.6]
Solicita un backend específico para renderizar la forma. Los valores posibles son los mismos que para rendererType. El valor por defecto es Shape.UnknownRenderer, lo que indica que no hay ninguna preferencia en particular.
Si el tipo de renderizador solicitado no es compatible con el backend Qt Quick actual, se utilizará en su lugar el renderizador predeterminado para ese backend. Esto se reflejará en rendererType cuando se inicialice el backend.
Shape.SoftwareRenderer actualmente no puede seleccionarse sin ejecutar el scenegraph con el backend software, en cuyo caso se seleccionará independientemente del preferredRendererType.
Ver rendererType para más información sobre las implicaciones.
Esta propiedad se introdujo en Qt 6.6.
rendererType : enumeration [read-only]
Esta propiedad determina qué backend de renderizado de ruta está activo.
| Constante | Descripción |
|---|---|
Shape.UnknownRenderer | El renderizador es desconocido. |
Shape.GeometryRenderer | La solución genérica e independiente del controlador para el renderizado GPU. Utiliza el mismo enfoque de triangulación basado en CPU que el motor de pintura OpenGL 2 de QPainter. Este es el valor por defecto cuando se utiliza el backend Qt Quick scenegraph basado en RHI. |
Shape.SoftwareRenderer | Dibujo puro en QPainter utilizando el motor de pintura raster. Esta es la opción por defecto, y la única, cuando el Qt Quick scenegraph se está ejecutando con el software backend. |
Shape.CurveRenderer | Renderizador basado en GPU que pretende preservar la curvatura a cualquier escala. A diferencia de Shape.GeometryRenderer, las curvas no se aproximan mediante líneas rectas cortas. En su lugar, las curvas se renderizan utilizando un fragment shader especializado. De este modo se mejora la calidad visual y se evitan los problemas de reteselación al hacer zoom. Además, Shape.CurveRenderer proporciona antialiasing nativo de alta calidad, sin el coste de rendimiento del multimuestreo o el supermuestreo. |
Por defecto, se seleccionará Shape.GeometryRenderer a menos que el escenario Qt Quick se esté ejecutando con el backend software. En ese caso, se utilizará Shape.SoftwareRenderer. Shape.CurveRenderer puede solicitarse utilizando la propiedad preferredRendererType.
Nota: Shape.CurveRenderer aproximará curvas cúbicas con cuadráticas y, por lo tanto, puede divergir ligeramente de la visualización matemáticamente correcta de la forma. Además, si la forma se está renderizando en una escena 3D de Qt Quick y el backend OpenGL para RHI está activo, se requiere la extensión GL_OES_standard_derivatives para OpenGL (está disponible por defecto en OpenGL ES 3 y posteriores, pero es opcional en OpenGL ES 2).
status : enumeration [read-only]
Esta propiedad determina el estado de la forma y es relevante cuando Shape.asynchronous se establece en true.
| Constante | Descripción |
|---|---|
Shape.Null | Aún no inicializado. |
Shape.Ready | La forma ha terminado de procesarse. |
Shape.Processing | La trayectoria se está procesando. |
vendorExtensionsEnabled : bool
Esta propiedad controla el uso de extensiones OpenGL no estándar.
El valor por defecto es false.
A partir de Qt 6.0 no hay implementadas rutas de renderizado específicas de proveedor.
© 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.