C
Indicators: Creating Safety-Critical UI
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
// This file is part of the Qt Safe Renderer module
import QtQuick
import Qt.SafeRenderer
Rectangle {
id: root
width: 640
height: 480
color: "#ffffff"
border.color: "#ffffff"
state: "park"
property alias text: safeText.text
LeftIndicators {
id: leftIndicators
anchors.left: parent.left
anchors.leftMargin: 48
anchors.bottom: parent.bottom
anchors.bottomMargin: 22
}
RightIndicators {
id: rightIndicators
height: 36
anchors.right: parent.right
anchors.rightMargin: 48
anchors.bottom: parent.bottom
anchors.bottomMargin: 22
}
SafeText {
id: safeText
objectName: "safetextitem"
anchors.horizontalCenter: parent.horizontalCenter
y: 48
width: 160
height: 80
color: "#000000"
fillColor: "#ffffff"
text: "0"
horizontalAlignment: SafeText.AlignHCenter
verticalAlignment: SafeText.AlignBottom
anchors.horizontalCenterOffset: 0
font.family: "Lato"
font.pixelSize: 72
runtimeEditable: true
}
SafeText {
id: safeUnitText
objectName: "safeunittextitem"
anchors.horizontalCenter: safeText.horizontalCenter
anchors.top: safeText.bottom
anchors.topMargin: 0
width: 100
height: 40
color: "#000000"
fillColor: "#ffffff"
text: "km/h"
horizontalAlignment: SafeText.AlignHCenter
verticalAlignment: SafeText.AlignTop
font.family: "Lato"
font.pixelSize: 28
runtimeEditable: false
}
SafeImage {
id: infopanel
objectName: "infopanel"
anchors.centerIn: parent
width: 226
height: 110
source: "images/rendering_failed.png"
fillColor: "#ffffff"
}
Column {
id: gearColumn
spacing: 14
anchors.right: parent.right
anchors.rightMargin: 48
anchors.verticalCenter: parent.verticalCenter
SafeImage {
id: park
objectName: "park"
width: 28
height: 35
source: "images/parking.png"
fillColor: "#ffffff"
}
SafeImage {
id: reverse
objectName: "reverse"
width: 28
height: 35
source: "images/reverse.png"
fillColor: "#ffffff"
}
SafeImage {
id: neutral
objectName: "neutral"
width: 28
height: 35
source: "images/neutral.png"
fillColor: "#ffffff"
}
SafeImage {
id: drive
objectName: "drive"
width: 28
height: 35
source: "images/drive.png"
fillColor: "#ffffff"
}
}
states: [
State {
name: "park"
PropertyChanges {
target: park
width: 36
height: 45
}
},
State {
name: "reverse"
PropertyChanges {
target: reverse
width: 36
height: 45
}
},
State {
name: "neutral"
PropertyChanges {
target: neutral
width: 36
height: 45
}
},
State {
name: "drive"
PropertyChanges {
target: drive
width: 36
height: 45
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "width,height"
duration: 100
easing.type: Easing.InOutQuad
}
}
]
}