Qt Labs StyleKit

StyleKit is a declarative styling system for Qt Quick Controls, built on top of Qt Quick Templates. It lets you define a complete visual style for all your controls from a single Style object, including support for themes, state-based styling, and transitions. StyleKit handles the underlying template implementation automatically, letting you focus purely on visual aspects such as colors, dimensions, borders, and shadows.

A key strength of StyleKit is its hierarchical property system: set a property once on a base type like abstractButton, and it automatically applies to all button-like controls. Override it where needed for specific controls or states. Changes to your style are instantly reflected across all controls, ensuring consistency while still allowing fine-grained customization.

For controls that need custom behavior beyond what StyleKit provides, you can still implement custom templates and integrate them seamlessly alongside StyleKit-styled controls.

Key Features

  • Declarative Styling - An easy-to-use QML API that lets you focus on design over implementation
  • Hierarchical Fallbacks - All properties propagate. Set them once, override where needed
  • State-Based Styling - Design separate appearances for hovered, pressed, focused, etc.
  • Animated Transitions - Define smooth animations between states
  • Theme Support - Design light and dark themes, and any number of custom themes
  • Variations - Design multiple variations of the same controls
  • Palette and Font Integration - Configure control palettes and fonts using QML

The following example shows a minimal example of a Style:

 // PlainStyle.qml

 import QtQuick
 import Qt.labs.StyleKit

 Style {
     control {
         padding: 6
         background {
             radius: 4
             implicitWidth: 100
             implicitHeight: 36
         }
         indicator {
             implicitWidth: 20
             implicitHeight: 20
             border.width: 1
         }
         handle {
             implicitWidth: 20
             implicitHeight: 20
             radius: 10
         }
     }

     button {
         background {
             implicitWidth: 120
             shadow.opacity: 0.6
             shadow.verticalOffset: 2
             shadow.horizontalOffset: 2
             gradient: Gradient {
                 GradientStop { position: 0.0; color: Qt.alpha("black", 0.0)}
                 GradientStop { position: 1.0; color: Qt.alpha("black", 0.2)}
             }
         }
         pressed.background.scale: 0.95
     }

     slider {
         indicator.implicitWidth: Style.Stretch
         indicator.implicitHeight: 6
         indicator.radius: 3
     }

     light: Theme {
         applicationWindow {
             background.color: "whitesmoke"
         }
         control {
             text.color: "black"
             background.color: "#e8e8e8"
             background.border.color: "#c0c0c0"
             hovered.background.color: "#d0d0d0"
         }
         button {
             text.color: "white"
             background.color: "cornflowerblue"
             background.shadow.color: "gray"
             hovered.background.color: "royalblue"
         }
     }

     dark: Theme {
         applicationWindow {
             background.color: Qt.darker("gray", 2.0)
         }
         control {
             text.color: "white"
             background.color: "#3a3a3a"
             background.border.color: "#555555"
             hovered.background.color: "#4a4a4a"
         }
         button {
             background.color: "sandybrown"
             background.shadow.color: "black"
             hovered.background.color: Qt.darker("sandybrown", 1.2)
         }
     }
 }

This is how to set the style in your application:

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

Using the Module in your Project

The QML types of the module are available through the QtQuick.labs.StyleKit import. To use the types, add the following import statement to your .qml file:

 import Qt.labs.StyleKit

Articles and Guides

Examples

QML Types

AbstractStylableControls

Abstract base type containing the control types that can be styled

AbstractStyle

Abstract base type with properties common to both Style and Theme

BorderStyle

Defines the border style for a delegate

ControlStateStyle

Defines the style for a control in a given state

ControlStyle

Defines the style for a control in the normal state

CustomControl

Defines styling for a custom control type

CustomTheme

Defines a named custom theme

DelegateStyle

Defines the visual appearance of an element within a control

HandleStyle

Defines the handle style for controls such as Switch, Slider and RangeSlider

ImageStyle

Defines the image style for a delegate

IndicatorStyle

Defines the style for a control's indicator

ShadowStyle

Defines the drop shadow style for a delegate

Style

Root type for a style definition

StyleAnimation

Animates style property changes during state transitions

StyleKit

A singleton for setting and accessing the current style

StyleKitDebug

Traces how style properties are resolved for a control

StyleReader

Provides access to control state and palette for styling

StyleVariation

Defines alternative styling for specific controls

StyledItem

Renders a DelegateStyle

SubIndicatorStyle

Defines the style for a sub-indicator delegate

TextStyle

Defines the text style for a control's label

Theme

Defines color and style overrides for a color scheme

Licenses

Qt Labs StyleKit is available under commercial licenses from The Qt Company. In addition, it is available under the GNU Lesser General Public License, version 3, or the GNU General Public License, version 2. See Qt Licensing for further details.