Übersicht über die Funktionen von StyleKit
Diese Seite bietet eine kurze Einführung in die wichtigsten Funktionen von StyleKit. Eine vollständige Übersicht über alle verfügbaren Typen und Eigenschaften finden Sie auf der Seite „ QML Types “.
Erstellen eines Stils
Ein „ Style “ ist ein QML-Objekt, das das visuelle Erscheinungsbild aller Qt Quick Controls in Ihrer Anwendung – „ button “, „ slider “, „ checkBox “ und so weiter. Jedes verfügt über eine eigene Gruppe im Stil, in der Sie Eigenschaften wie Farben, Größen, Radien und Schatten für die visuellen Bestandteile des Steuerelements festlegen können.
Das „ control group “ ist etwas Besonderes, da es als Fallback für alle anderen Steuerelementgruppen dient. Wenn Sie beispielsweise einige der Eigenschaften für ein „ slider “ weglassen, werden diese stattdessen aus dem „ control “ gelesen. Eigenschaften, die weder in „ slider “ noch in „ control “ festgelegt sind, greifen weiter auf „ fallback style “ zurück, bei dem es sich um einen vollständigen Stil handelt, der dem „Basic Style“ ähnelt. Das bedeutet, dass Sie nicht unbedingt alle verfügbaren Steuerelemente gestalten müssen, sondern nur diejenigen, die Sie anpassen möchten – das Fallback-System kümmert sich um die Gestaltung der übrigen Elemente:
// PlainStyle.qml
Style {
control {
// control does not map to an actual Qt Quick Control, but is a shared
// fallback for all other controls. Use it to define styling that is
// common to all of them. Unset properties fall back to Style.fallbackStyle.
padding: 6
text.color: "white"
background {
radius: 4
border.color: "gray"
}
indicator {
width: 20
height: 20
border.width: 1
radius: 3
}
handle {
width: 20
height: 20
radius: 10
}
}
slider {
// slider defines the styling for a Qt Quick Slider.
// Unset properties fall back to control.
handle.color: "white"
indicator {
fillWidth: true
height: 6
color: "steelblue"
foreground.color: "skyblue"
}
}
abstractButton {
// abstractButton does not map to an actual Qt Quick Control, but
// is a shared fallback for button-like controls, such as button,
// radioButton, checkBox). Use it to define styling that is common
// to all of them. Unset properties fall back to control.
background.shadow {
opacity: 0.6
verticalOffset: 2
horizontalOffset: 2
color: "gray"
}
}
button {
// button defines the styling for a Qt Quick Button.
// Unset properties fall back to abstractButton.
background {
width: 120
color: "lightsteelblue"
gradient: Gradient {
GradientStop { position: 0.0; color: Qt.alpha("black", 0.0)}
GradientStop { position: 1.0; color: Qt.alpha("black", 0.2)}
}
}
}
// Controls left undefined — such as radioButton, checkBox, roundButton
// or switchControl — fall back to their immediate base type, which in
// this style will be either abstractButton or control directly.
}Aktivieren eines Stils
Um den Stil zu aktivieren, weisen Sie ihn unter „ StyleKit.style “ der Stammkomponente „ ApplicationWindow “ zu. Alle Steuerelemente in der Anwendung übernehmen ihn dann automatisch:
// Main.qml
import QtQuick
import Qt.labs.StyleKit
ApplicationWindow {
id: app
width: 1024
height: 800
visible: true
// Assign the style to be used
StyleKit.style: PlainStyle {}
// Controls are used as normal
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Button {
text: "Button"
}
Slider {
width: 200
}
}
}Zustände von Steuerelementen
Steuerelemente ändern ihr Erscheinungsbild je nach Benutzerinteraktion – eine Schaltfläche sieht anders aus, wenn der Mauszeiger darüberfährt, sie gedrückt wird oder deaktiviert ist. Mit „ StyleKit “ können Sie dies im Stil ausdrücken, indem Sie den Namen „ state “ vor die betroffenen Eigenschaften setzen, um ihnen alternative Werte zuzuweisen, wenn sich das Steuerelement in diesem Zustand befindet.
Zustände können verschachtelt werden, und eine spezifischere Kombination (z. B. „ hovered.checked “) hat Vorrang vor ihren einzelnen Komponenten:
button {
text.color: "aliceblue"
background.color: "cornflowerblue"
pressed.background.color: "deepskyblue"
hovered.background.color: "lightskyblue"
focused.background.color: "lightsteelblue"
checked.background.color: "royalblue"
highlighted.background.color: "lightblue"
disabled {
background.color: "lightgray"
background.border.color: "darkgray"
}
// Nested states, such as hovered.checked in this case, takes
// precedence over both hovered and checked:
hovered.checked.background.color: "steelblue"
}Zustandsübergänge
Zustandsänderungen können animiert werden, indem die Eigenschaft „ transition “ im Stil eines Steuerelements festgelegt wird. Ein „ StyleAnimation “ bietet eine bequeme Möglichkeit, Gruppen verwandter Stileigenschaften zu animieren, wie z. B. alle Hintergrund- oder Indikatorfarben, aber Sie können auch Standard-QML-Animationen wie „ ColorAnimation “ und „ NumberAnimation “ verwenden:
comboBox {
background.color: "lightgray"
hovered.background.color: "plum"
indicator.color: "white"
hovered.indicator.color: "pink"
hovered.indicator.border.width: 4
transition: Transition {
StyleAnimation {
animateBackgroundColors: true
animateIndicatorColors: true
animateIndicatorBorder: true
easing.type: Easing.OutQuad
duration: 500
}
}
}Theming
StyleKit bietet über die Eigenschaften „ light “ und „ dark “ eines „ Style “ integrierte Unterstützung für helle und dunkle Designs. Ähnlich wie bei einem „ Style “ können Sie mit einem „ Theme “ den Stil festlegen, den jedes Steuerelement haben soll, wenn dieses Design aktiv ist. Eigenschaften, die in einem Design nicht festgelegt sind, werden standardmäßig aus dem Stil übernommen:
Style {
light: Theme {
applicationWindow.background.color: "gainsboro"
control.text.color: "#202020"
control.background.color: "#f0f0f0"
control.background.border.color: "#d0d0d0"
button.hovered.background.color: "#4a90d9"
radioButton.indicator.foreground.color: "#d0d0d0"
}
dark: Theme {
applicationWindow.background.color: "#2b2b2b"
control.text.color: "#e0e0e0"
control.background.color: "#404040"
control.background.border.color: "#606060"
button.hovered.background.color: "#6ab0f9"
radioButton.indicator.foreground.color: "#606060"
}
}Benutzerdefinierte Designs
Neben „light“ und „dark“ können Sie beliebig viele zusätzliche Themen mithilfe von ` CustomTheme` definieren. Jedes ` CustomTheme ` verfügt über ein ` name ` und enthält ein ` Theme `-Objekt mit derselben Struktur wie die integrierten Themen:
Style {
CustomTheme {
name: "HighContrast"
theme: Theme {
control.background.color: "white"
control.background.border.color: "black"
control.background.border.width: 2
}
}
CustomTheme {
name: "Sepia"
theme: Theme {
control.text.color: "#5b4636"
control.background.color: "#f4ecd8"
control.background.border.color: "#c8b99a"
applicationWindow.background.color: "#efe6d0"
}
}
}Um das Design zur Laufzeit zu wechseln, setzen Sie in einer QML-Datei Ihrer Anwendung Style.themeName auf den Namen des gewünschten Designs. Die Eigenschaft `Style.themeNames` listet alle verfügbaren Designnamen auf, was das Befüllen eines Selektor-Steuerelements vereinfacht:
ComboBox {
model: StyleKit.style.availableThemeNames
onCurrentTextChanged: StyleKit.style.themeName = currentText
}Um ein Theme beim Start der Anwendung zu aktivieren, setzen Sie ` themeName ` bei der Zuweisung des Stils:
ApplicationWindow {
width: 1024
height: 800
visible: true
StyleKit.style: MyStyleKitStyle {
themeName: "HighContrast"
}
}Stilvariationen
Mit einem „ StyleVariation “ können Sie alternative Stile für Teile der Anwendung definieren. Dies ist nützlich, wenn Sie Steuerelemente unterschiedlich gestalten müssen, wenn sie beispielsweise Kinder eines „ ToolBar “ oder eines „ GroupBox “ sind, oder wenn Sie Stilhinweise implementieren möchten, die die Anwendung optional auf einige der Steuerelemente anwenden kann.
Es gibt zwei Arten von Stilvariationen: Typvariationen und Instanzvariationen.
Typvariationen
Eine Typvariante enthält alternative Stile für Steuerelemente, die Kinder (oder Nachkommen) eines anderen Steuerelementtyps sind. Das bedeutet: Wenn ein „ StyleVariation “ Stile für eine Schaltfläche enthält und diesem die Eigenschaft „ variations “ eines Frames zugewiesen wird, wendet „ StyleKit “ die Stile entsprechend auf alle „ Buttons “ an, die in der Anwendung Kinder von „ Frames “ sind:
Style {
frame {
variations: StyleVariation {
button {
text.color: "ghostwhite"
background.border.width: 0
background.color: "slategrey"
}
}
}
groupBox {
// groupBox falls back to frame. Therefore, if the varations set on a
// frame is not wanted on a groupBox, just override it and set it back to [].
variations: []
}
}Instanzvariationen
Benannte „ StyleVariations “ können mithilfe der angehängten Eigenschaft „ StyleVariation.variations “ auf einzelne Steuerelemente in der Anwendung angewendet werden. Bei der Anwendung erhalten das Steuerelement selbst sowie alle seine Nachkommen die alternative Gestaltung. Dies unterscheidet sich von einer Typvariation, die alle Steuerelemente eines bestimmten Typs betrifft, wie beispielsweise alle „ Frames “. Instanzvariationen wirken sich nur auf die Steuerelementinstanz (und deren Nachkommen) aus, an die sie angehängt sind:
Style {
StyleVariation {
name: "mini"
control {
padding: 2
background.height: 15
indicator.width: 15
indicator.height: 15
handle.width: 15
handle.height: 15
}
}
StyleVariation {
name: "alert"
abstractButton.background.color: "red"
}
}Wenden Sie sie auf Steuerelemente in Ihrer Anwendung an:
GroupBox {
title: "Mini controls"
StyleVariation.variations: ["mini"]
Row {
spacing: 10
Button { text: "Save" }
CheckBox { text: "Option" }
// This button also has the "alert" variation, in addition to "mini"
Button {
text: "Delete"
StyleVariation.variations: ["alert"]
}
}
}Benutzerdefinierte Steuerelemente
Wenn Ihre Anwendung benutzerdefinierte Steuerelemente enthält, die nicht Teil von Qt Quick Controls, können Sie diese dennoch in „ StyleKit “ integrieren. Fügen Sie einfach für jedes dieser Steuerelemente ein „ CustomControl “ hinzu und gestalten Sie deren Stil auf dieselbe Weise wie bei den „ built-in controls “:
// MyStyle.qml
Style {
id: style
readonly property int myControlType: 0
CustomControl {
controlType: style.myControlType
background {
width: 120
height: 30
radius: 0
}
hovered.background.color: "lightslategray"
pressed.background.color: "skyblue"
}
}Verwenden Sie in der Implementierung des Steuerelements einen „ StyleReader “ mit dem passenden „ controlType “, um die Stileigenschaften zurückzulesen. Die korrekten Eigenschaftswerte werden unter Berücksichtigung von „ Themes “, „ StyleVariations “, „ fallback types “ und der Eigenschaftsweitergabe ermittelt. Damit ein Style-Reader dies tun kann, muss er den Zustand Ihres Steuerelements kennen. Binden Sie daher den Zustand Ihres Steuerelements an die entsprechenden „ StyleReader “-Eigenschaften wie „ hovered “ und „ pressed “. Bei jeder Zustandsänderung werden alle betroffenen Stileigenschaften aktualisiert, was dazu führt, dass Ihr Steuerelement neu gezeichnet wird:
// Main.qml
component MyControl : Rectangle {
StyleReader {
id: styleReader
controlType: StyleKit.style.myControlType
hovered: hoverHandler.hovered
pressed: tapHandler.pressed
palette: app.palette
}
HoverHandler { id: hoverHandler }
TapHandler { id: tapHandler }
implicitWidth: styleReader.background.width
implicitHeight: styleReader.background.height
color: styleReader.background.color
radius: styleReader.background.radius
Text {
font: styleReader.font
anchors.centerIn: parent
text: "ok"
}
}Benutzerdefinierte Delegaten
Jeder visuelle Teil eines Steuerelements – „ background “, „ handle “, „ indicator “ usw. – wird von einem „ delegate “ gerendert. Standardmäßig verwendet „ StyleKit “ „ StyledItem “ für das Rendering, Sie können es jedoch vollständig durch eine eigene QML-Komponente ersetzen.
Die Komponente muss zwei erforderliche Eigenschaften definieren, die von StyleKit automatisch ausgefüllt werden:
delegateStyle— die „ DelegateStyle “, die die aufgelösten Stileigenschaften (Farbe, Radius, implizite Größe usw.) enthältcontrol— die „Qt Quick “, zu der der Delegat gehört
Anschließend weisen Sie die Komponente der Eigenschaft „ delegate “ des visuellen Teils zu, den Sie beeinflussen möchten:
// import QtQuick.Templates as T
slider {
handle.delegate: Rectangle {
id: handle
required property DelegateStyle delegateStyle
required property T.Slider control
implicitWidth: delegateStyle.width
implicitHeight: delegateStyle.height
radius: delegateStyle.radius
color: delegateStyle.color
Text {
anchors.centerIn: parent
text: handle.control.value.toFixed(0)
}
}
}Overlay und Underlay
Wenn Sie die Standarddarstellung nur ergänzen und nicht vollständig ersetzen möchten, verwenden Sie „ StyledItem “ als Stammelement Ihres Delegaten. Alle untergeordneten Elemente, die Sie zu „ StyledItem “ hinzufügen, werden über der Standarddarstellung gezeichnet (Overlay):
Style {
component Star : Shape {
id: star
property color color
ShapePath {
fillColor: star.color
scale: Qt.size(star.width, star.height)
PathMove { x: 0.50; y: 0.00 }
PathLine { x: 0.59; y: 0.35 }
PathLine { x: 0.97; y: 0.35 }
PathLine { x: 0.66; y: 0.57 }
PathLine { x: 0.78; y: 0.91 }
PathLine { x: 0.50; y: 0.70 }
PathLine { x: 0.22; y: 0.91 }
PathLine { x: 0.34; y: 0.57 }
PathLine { x: 0.03; y: 0.35 }
PathLine { x: 0.41; y: 0.35 }
PathLine { x: 0.50; y: 0.00 }
}
}
button {
background.delegate: StyledItem {
width: parent.width
height: parent.height
// Draw a star on top the default rendering
Star {
anchors.fill: parent
color: "gold"
}
}
}
}Um stattdessen etwas unterhalb der Standarddarstellung darzustellen, machen Sie Ihren Delegaten zu einem „ Item “, platzieren Sie den zusätzlichen Inhalt an erster Stelle und betten Sie ein „ StyledItem “ als untergeordnetes Element ein, um die Standarddarstellung darüber darzustellen:
Style {
component Star : Shape {
id: star
property color color
ShapePath {
fillColor: star.color
scale: Qt.size(star.width, star.height)
PathMove { x: 0.50; y: 0.00 }
PathLine { x: 0.59; y: 0.35 }
PathLine { x: 0.97; y: 0.35 }
PathLine { x: 0.66; y: 0.57 }
PathLine { x: 0.78; y: 0.91 }
PathLine { x: 0.50; y: 0.70 }
PathLine { x: 0.22; y: 0.91 }
PathLine { x: 0.34; y: 0.57 }
PathLine { x: 0.03; y: 0.35 }
PathLine { x: 0.41; y: 0.35 }
PathLine { x: 0.50; y: 0.00 }
}
}
slider.handle.delegate: Item {
// Since the root item is not a StyledItem, the following
// required properties must be defined explicitly:
required property DelegateStyle delegateStyle
required property QtObject control
implicitWidth: delegateStyle.width
implicitHeight: delegateStyle.height
width: parent.width
height: parent.height
scale: delegateStyle.scale
rotation: delegateStyle.rotation
visible: delegateStyle.visible
// Draw a star underneath the default handle delegate
Star {
width: parent.width * 2
height: parent.height * 2
anchors.centerIn: parent
color: "gold"
}
StyledItem {
// Forward delegateStyle into StyledItem. StyledItem doesn't
// use 'control' for anything, so it can be omitted.
delegateStyle: parent.delegateStyle
}
}
}Benutzerdefinierte Daten
Benutzerdefinierte Delegaten benötigen manchmal zusätzliche Stileigenschaften, die über die integrierten hinausgehen – beispielsweise, um untergeordnete Elemente zu gestalten, von denen „ StyleKit “ nichts weiß. Die Eigenschaft „ data “ macht dies möglich. Sie kann ein beliebiges „ QtObject “ enthalten und somit alle Informationen transportieren, die Ihr Delegat benötigt.
Wie alle anderen Stileigenschaften ist auch „ data “ an der Auflösung von Stileigenschaften beteiligt – der Delegat erhält immer das Objekt, das dem aktuellen Steuerelementzustand, dem aktiven Design und den Stilvariationen entspricht. Im Gegensatz zu den integrierten Eigenschaften wird „ data “ als Ganzes weitergegeben – einzelne Eigenschaften innerhalb des Objekts werden nicht separat weitergegeben:
component OverlayData : QtObject {
property color overlayColor
}
toolButton {
background.delegate: StyledItem {
id: custom
Text {
color: custom.delegateStyle.data.overlayColor
font.pixelSize: 30
text: "シ"
}
}
background.data: OverlayData {
overlayColor: "sandybrown"
}
hovered.background.data: OverlayData {
overlayColor: "magenta"
}
}© 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.