Onboarding Tutorial
Demonstrates how onboarding overlays can highlight controls on demand.
The example opens a Kirigami window and marks target controls with Onboarding attached properties. The overlay draws a highlight around the current focus area, and the tooltip text is driven by the current target's attached Onboarding::texts property.
Workflow
- Mark a source item with Onboarding::isSource.
- Add grouped Onboarding attached properties directly to controls inside Page1.qml, Page2.qml, and Page3.qml.
- Use Onboarding::start() or Onboarding::start(string) to begin walking the target items in a group.
- Use Onboarding::aboutToShow handlers to keep the swipe view synchronized with tutorial progression.
- Supply Onboarding::additionalDataComponent so the tooltip can show context-sensitive media from each step's Onboarding::additionalData.
Key Snippets
Start the default onboarding flow from a keyboard shortcut:
Shortcut { context: Qt.ApplicationShortcut sequence: "F1" onActivated: Onboarding.start() }
Add attached properties with media content displayed in the tooltip:
Onboarding.texts: [qsTr("This button starts the default onboarding tutorial.")] Onboarding.additionalData: ({ video: "qrc:/qt/qml/org/kde/kirigamiaddons/examples/onboardingtutorial/onboarding-video.webp", videoCaption: "This is a video caption", })
Run a per-step callback before focusing an item:
Onboarding.groups: ["advanced"] Onboarding.texts: [qsTr("This checkbox is on the second page of the advanced flow.")] Onboarding.onAboutToShow: item.swipeView.currentIndex = 1
Bind Onboarding::additionalDataComponent to dynamic media from the current item:
ColumnLayout { readonly property var additionalData: Onboarding.currentItem?.additionalData ?? ({}) Platform.Theme.colorSet: Platform.Theme.Tooltip Platform.Theme.inherit: false implicitWidth: Math.max(video.Layout.preferredWidth, videoCaption.implicitWidth) spacing: 0 visible: video.source.toString().length > 0 AnimatedImage { id: video Layout.alignment: Qt.AlignHCenter Layout.maximumHeight: Kirigami.Units.gridUnit * 7 Layout.maximumWidth: Kirigami.Units.gridUnit * 14 Layout.preferredHeight: implicitWidth > 0 ? Math.min(Layout.preferredWidth * implicitHeight / implicitWidth, Layout.maximumHeight) : 0 Layout.preferredWidth: implicitHeight > 0 && implicitWidth > 0 ? Math.min(implicitWidth, Layout.maximumWidth, Layout.maximumHeight * implicitWidth / implicitHeight) : 0 fillMode: Image.PreserveAspectFit sourceSize.width: Layout.maximumWidth source: parent.additionalData.video ?? "" } QQC2.Label { id: videoCaption Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: Math.min(implicitWidth, video.Layout.preferredWidth) color: Platform.Theme.textColor horizontalAlignment: Text.AlignHCenter text: parent.additionalData.videoCaption ?? "" visible: text.length > 0 wrapMode: Text.WordWrap } }
Keep the tutorial pages instantiated so targets remain available during onboarding:
Item { id: pageHost anchors.fill: parent Onboarding.isSource: true Onboarding.sourceGroups: ["", "advanced"] ColumnLayout { anchors.fill: parent spacing: 0 QQC2.SwipeView { id: swipeView Layout.fillHeight: true Layout.fillWidth: true interactive: !Onboarding.active Page1 { swipeView: swipeView } Page2 { swipeView: swipeView } Page3 { swipeView: swipeView } } QQC2.PageIndicator { Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: Kirigami.Units.largeSpacing count: swipeView.count currentIndex: swipeView.currentIndex } } }
Summary
This example shows how to:
- Combine attached onboarding metadata with standard Qt Quick controls to drive an onboarding flow.
- Define default and named walkthrough groups over the same source.
- Highlight controls while blurring the surrounding source area.
- Synchronize dynamically visible pages before target lookup.
- Extend the visible tooltip content with Onboarding::additionalDataComponent.
Files:
- OnboardingTutorial/CMakeLists.txt
- OnboardingTutorial/Main.qml
- OnboardingTutorial/Page1.qml
- OnboardingTutorial/Page2.qml
- OnboardingTutorial/Page3.qml
- OnboardingTutorial/main.cpp
Images: