C
Qt Quick Ultralite shapes Example
Demonstrates how to use shapes in Qt Quick Ultralite.
Overview
This example shows how to use the Shape and ShapePath APIs in QML.

Target platforms
- Infineon TRAVEO T2G (with caveat noted in the Supported Features table)
- RH850 D1M1A
- MCIMX93-EVK
- MIMXRT1050
- MIMXRT1060
- MIMXRT1064
- MIMXRT1170
- STM32F769I
- STM32H750B
Project structure
The shapes example consists of 10 files, CMakeLists.txt, shapes.qml, ArcDirection.qml, ArcRotation.qml, CapStyles.qml, CubicCurve.qml, FillRules.qml, JoinStyles.qml, LargeSmallArc.qml, QuadraticCurve.qml, and ShapesEntry.qml.
CMake project file
The CMake project file contains a basic build script.
# Copyright (C) 2026 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial
cmake_minimum_required(VERSION 3.21.1)
project(shapes VERSION 0.0.1 LANGUAGES C CXX ASM)
find_package(QulApp)
if(QUL_PLATFORM MATCHES "^mimxrt1170-evkb")
set(shapes_root_qml "+mimxrt1170-evkb/shapes.qml")
elseif(QUL_PLATFORM MATCHES "^tviic2d.*")
set(shapes_root_qml "+traveo-t2g/shapes.qml")
else()
set(shapes_root_qml "shapes.qml")
endif()
if(QUL_PLATFORM MATCHES "autosar")
qul_add_library(shapes)
else()
qul_add_executable(shapes)
endif()
qul_add_qml_module(shapes
URI ShapesApp
QML_FILES
${shapes_root_qml}
ShapesEntry.qml
FillRules.qml
JoinStyles.qml
CapStyles.qml
QuadraticCurve.qml
CubicCurve.qml
ArcDirection.qml
LargeSmallArc.qml
ArcRotation.qml
)
target_link_libraries(shapes PRIVATE Qul::Shapes)
app_target_setup_os(shapes)
app_target_default_entrypoint(shapes shapes MODULE ShapesApp)ArcDirection.qml
ArcDirection.qml demonstrates the PathArc direction property.
Shape {
width: 100
height: 100
anchors.centerIn: parent
scale: root.shapeScale
ShapePath {
fillColor: "transparent"
strokeColor: index === 1 ? "red" : "blue"
strokeWidth: 4
startX: 4; startY: 4
PathArc {
id: arc
x: 96; y: 96
radiusX: 100; radiusY: 100
direction: index === 1 ? PathArc.Clockwise : PathArc.Counterclockwise
}
}
}ArcRotation.qml
ArcRotation.qml demonstrates the PathArc xAxisRotation property.
Shape {
width: 200
height: 200
anchors.centerIn: parent
scale: root.shapeScale
ShapePath {
fillColor: "transparent"
strokeColor: index === 1 ? "red" : "blue"
strokeWidth: 4
startX: 50; startY: 100
PathArc {
x: 150; y: 100
radiusX: 50; radiusY: 20
xAxisRotation: index === 1 ? 0 : 45
}
}
}
Shape {
width: 200
height: 200
anchors.centerIn: parent
scale: root.shapeScale
ShapePath {
fillColor: "transparent"
strokeColor: index === 1 ? "red" : "blue"
startX: 50; startY: 100
PathArc {
x: 150; y: 100
radiusX: 50; radiusY: 20
xAxisRotation: index === 1 ? 0 : 45
direction: PathArc.Counterclockwise
}
}
}CapStyles.qml
CapStyles.qml demonstrates the ShapePath capStyle property.
Shape {
anchors.centerIn: parent
width: 200
height: 100
scale: root.shapeScale
ShapePath {
id: capTest
strokeColor: "black"
strokeWidth: 20
fillColor: "transparent"
property int capStyleIdx: 0
capStyle: style(capTest.capStyleIdx)
startX: 50; startY: 30
PathSvg { path: "Q 10 80 60 80 L 140 80 Q 190 80 150 30" }
}
}CubicCurve.qml
CubicCurve.qml demonstrates PathCubic element.
Shape {
id: shape
anchors.fill: parent
ShapePath {
strokeWidth: 4 * root.shapeScale
strokeColor: "black"
fillColor: "#55ff7788"
startX: 50 * root.shapeScale
startY: 150 * root.shapeScale
PathCubic {
x: 150 * root.shapeScale
y: 150 * root.shapeScale
control1X: cp1.x; control1Y: cp1.y
control2X: cp2.x; control2Y: cp2.y
}
}
}FillRules.qml
FillRules.qml demonstrates the ShapePath fillRule property.
Shape {
width: 100
height: 100
scale: 1.4 * root.shapeScale
anchors.centerIn: parent
ShapePath {
id: star
strokeColor: "blue"
fillColor: "#55ff7788"
strokeWidth: 3
capStyle: ShapePath.RoundCap
joinStyle: ShapePath.RoundJoin
PathMove { x: 90; y: 50 }
PathLine { x: 50 + 40 * Math.cos(0.8 * 1 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 1 * Math.PI) }
PathLine { x: 50 + 40 * Math.cos(0.8 * 2 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 2 * Math.PI) }
PathLine { x: 50 + 40 * Math.cos(0.8 * 3 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 3 * Math.PI) }
PathLine { x: 50 + 40 * Math.cos(0.8 * 4 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 4 * Math.PI) }
PathLine { x: 90; y: 50 }
}
NumberAnimation on rotation {
from: 0
to: 360
duration: 5000
loops: Animation.Infinite
}
}JoinStyles.qml
JoinStyles.qml demonstrates the ShapePath joinStyle property.
Shape {
anchors.centerIn: parent
width: 120
height: 120
scale: root.shapeScale
ShapePath {
id: joinTest
strokeColor: "black"
strokeWidth: 16
fillColor: "transparent"
capStyle: ShapePath.RoundCap
property int joinStyleIdx: 0
joinStyle: style(joinStyleIdx)
startX: 30
startY: 30
PathLine { x: 100; y: 100 }
PathLine { x: 30; y: 100 }
}
}LargeSmallArc.qml
LargeSmallArc.qml demonstrates the PathArc useLargeArc property.
Shape {
width: 200
height: 200
anchors.centerIn: parent
scale: root.shapeScale
ShapePath {
fillColor: "transparent"
strokeColor: index === 0 ? "red" : "blue"
strokeWidth: 4
startX: 50; startY: 100
PathArc {
x: 100; y: 150
radiusX: 50; radiusY: 50
useLargeArc: index === 1
}
}
}QuadraticCurve.qml
QuadraticCurve.qml demonstrates PathQuad element be filled with a LinearGradient.
Shape {
id: shape
width: parent.width
height: 100
anchors.verticalCenter: parent.verticalCenter
ShapePath {
strokeWidth: 4 * root.shapeScale
strokeColor: "black"
fillGradient: LinearGradient {
x1: 50 * root.shapeScale
y1: 100 * root.shapeScale
x2: (50 + pathQuad.controlX) * root.shapeScale / 2
y2: 50 * root.shapeScale
GradientStop {
position: 0
color: "#ffffffaa"
}
GradientStop {
position: 1
color: "#ffff7788"
}
}
startX: 50 * root.shapeScale
startY: 100 * root.shapeScale
closed: true
PathQuad {
id: pathQuad
x: 150 * root.shapeScale
y: 100 * root.shapeScale
controlX: cp.x; controlY: cp.y
}
}
}Files:
- shapes/+mimxrt1170-evkb/shapes.qml
- shapes/+traveo-t2g/shapes.qml
- shapes/ArcDirection.qml
- shapes/ArcRotation.qml
- shapes/CMakeLists.txt
- shapes/CapStyles.qml
- shapes/CubicCurve.qml
- shapes/FillRules.qml
- shapes/JoinStyles.qml
- shapes/LargeSmallArc.qml
- shapes/QuadraticCurve.qml
- shapes/ShapesEntry.qml
- shapes/shapes.qml
Available under certain Qt licenses.
Find out more.