aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDilek Akcay <dilek.akcay@qt.io>2026-09-08 15:55:03 +0200
committerDilek Akcay <dilek.akcay@qt.io>2026-09-16 05:07:06 +0000
commit0eaab825a0762b208e2ebb6349cce69ef9a863b9 (patch)
tree5fc945163d46b12235001b89803fb908e637a505
parent3027a40c87ee06d201620a35b091e5ef1a7bb26a (diff)
StyleKit: Implement ToolTip
Pick-to: 6.12 Change-Id: I6fb24d3c8b54ce0a375150d3a3c57f7f109acb07 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r--src/labs/stylekit/CMakeLists.txt1
-rw-r--r--src/labs/stylekit/ToolTip.qml66
-rw-r--r--src/labs/stylekit/doc/snippets/ControlsSnippets.qml11
-rw-r--r--src/labs/stylekit/doc/snippets/ReferenceFallbackStyle.qml9
-rw-r--r--src/labs/stylekit/impl/FallbackStyle.qml9
-rw-r--r--src/labs/stylekit/qqstylekitcontrols.cpp11
-rw-r--r--src/labs/stylekit/qqstylekitcontrols_p.h3
-rw-r--r--src/labs/stylekit/qqstylekitpropertyresolver.cpp3
-rw-r--r--src/labs/stylekit/qqstylekitreader.cpp1
-rw-r--r--src/labs/stylekit/qqstylekitreader_p.h1
-rw-r--r--src/labs/stylekit/qqstylekittheme.cpp2
11 files changed, 116 insertions, 1 deletions
diff --git a/src/labs/stylekit/CMakeLists.txt b/src/labs/stylekit/CMakeLists.txt
index 7b60d4d624..b694b11485 100644
--- a/src/labs/stylekit/CMakeLists.txt
+++ b/src/labs/stylekit/CMakeLists.txt
@@ -76,6 +76,7 @@ qt_internal_add_qml_module(LabsStyleKit
ToolBar.qml
ToolButton.qml
ToolSeparator.qml
+ ToolTip.qml
Page.qml
Pane.qml
Popup.qml
diff --git a/src/labs/stylekit/ToolTip.qml b/src/labs/stylekit/ToolTip.qml
new file mode 100644
index 0000000000..44a9759d32
--- /dev/null
+++ b/src/labs/stylekit/ToolTip.qml
@@ -0,0 +1,66 @@
+// Copyright (C) 2026 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// Qt-Security score:significant reason:default
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import Qt.labs.StyleKit
+import Qt.labs.StyleKit.impl
+
+T.ToolTip {
+ id: control
+
+ x: parent ? (parent.width - implicitWidth) / 2 : 0
+ y: -implicitHeight - 3
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ leftPadding: styleReader.leftPadding
+ rightPadding: styleReader.rightPadding
+ topPadding: styleReader.topPadding
+ bottomPadding: styleReader.bottomPadding
+
+ leftInset: styleReader.background.leftMargin
+ rightInset: styleReader.background.rightMargin
+ topInset: styleReader.background.topMargin
+ bottomInset: styleReader.background.bottomMargin
+
+ spacing: styleReader.spacing
+
+ font: styleReader.font
+
+ StyleVariation.controlType: styleReader.controlType
+ StyleReader {
+ id: styleReader
+ controlType: StyleReader.ToolTip
+ enabled: control.enabled
+ focused: control.activeFocus
+ palette: control.palette
+ }
+
+ closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ wrapMode: Text.Wrap
+ color: styleReader.text.color
+
+ padding: styleReader.text.padding
+ leftPadding: styleReader.text.leftPadding
+ rightPadding: styleReader.text.rightPadding
+ bottomPadding: styleReader.text.bottomPadding
+ topPadding: styleReader.text.topPadding
+ verticalAlignment: styleReader.text.alignment
+ horizontalAlignment: styleReader.text.alignment
+ }
+
+ background: BackgroundDelegate {
+ quickControl: control
+ backgroundStyle: styleReader.background
+ }
+}
diff --git a/src/labs/stylekit/doc/snippets/ControlsSnippets.qml b/src/labs/stylekit/doc/snippets/ControlsSnippets.qml
index 217cbb9292..38f8088068 100644
--- a/src/labs/stylekit/doc/snippets/ControlsSnippets.qml
+++ b/src/labs/stylekit/doc/snippets/ControlsSnippets.qml
@@ -912,6 +912,17 @@ ApplicationWindow {
}
//! [toolSeparator]
+ //! [toolTip]
+ toolTip {
+ text.padding: 2
+ background {
+ width: 20
+ height: 20
+ color: "white"
+ }
+ }
+ //! [toolTip]
+
//! [theme]
light: Theme {
applicationWindow.background.color: "#f0f0f0"
diff --git a/src/labs/stylekit/doc/snippets/ReferenceFallbackStyle.qml b/src/labs/stylekit/doc/snippets/ReferenceFallbackStyle.qml
index 5ae69bb0bc..9c4277fdea 100644
--- a/src/labs/stylekit/doc/snippets/ReferenceFallbackStyle.qml
+++ b/src/labs/stylekit/doc/snippets/ReferenceFallbackStyle.qml
@@ -686,5 +686,14 @@ BaseStyle {
foreground.visible: false
}
}
+
+ toolTip {
+ text.padding: 2
+ background {
+ width: 20
+ height: 20
+ color: __baseWhite
+ }
+ }
}
//! [1]
diff --git a/src/labs/stylekit/impl/FallbackStyle.qml b/src/labs/stylekit/impl/FallbackStyle.qml
index 99451cdea0..a33fc1f0e6 100644
--- a/src/labs/stylekit/impl/FallbackStyle.qml
+++ b/src/labs/stylekit/impl/FallbackStyle.qml
@@ -745,4 +745,13 @@ BaseStyle {
}
}
}
+
+ toolTip {
+ text.padding: 2
+ background {
+ width: 20
+ height: 20
+ color: __baseWhite
+ }
+ }
}
diff --git a/src/labs/stylekit/qqstylekitcontrols.cpp b/src/labs/stylekit/qqstylekitcontrols.cpp
index ad1a342591..ece5be7148 100644
--- a/src/labs/stylekit/qqstylekitcontrols.cpp
+++ b/src/labs/stylekit/qqstylekitcontrols.cpp
@@ -599,6 +599,16 @@ QT_BEGIN_NAMESPACE
\snippet ControlsSnippets.qml toolSeparator
*/
+/*!
+ \qmlproperty ControlStyle AbstractStylableControls::toolTip
+
+ Grouped property for styling \l [QtQuickControls]{ToolTip}.
+
+ Unset properties fall back to \l popup.
+
+ \snippet ControlsSnippets.qml toolTip
+*/
+
using namespace Qt::StringLiterals;
QQStyleKitControls::QQStyleKitControls(QObject *parent)
@@ -702,6 +712,7 @@ IMPLEMENT_ACCESSORS(textInput, QQStyleKitReader::ControlType::TextInput)
IMPLEMENT_ACCESSORS(toolBar, QQStyleKitReader::ControlType::ToolBar)
IMPLEMENT_ACCESSORS(toolButton, QQStyleKitReader::ControlType::ToolButton)
IMPLEMENT_ACCESSORS(toolSeparator, QQStyleKitReader::ControlType::ToolSeparator)
+IMPLEMENT_ACCESSORS(toolTip, QQStyleKitReader::ControlType::ToolTip)
IMPLEMENT_ACCESSORS(radioButton, QQStyleKitReader::ControlType::RadioButton)
IMPLEMENT_ACCESSORS(radioDelegate, QQStyleKitReader::ControlType::RadioDelegate)
IMPLEMENT_ACCESSORS(roundButton, QQStyleKitReader::ControlType::RoundButton)
diff --git a/src/labs/stylekit/qqstylekitcontrols_p.h b/src/labs/stylekit/qqstylekitcontrols_p.h
index 792b4f4338..4e050f5b2a 100644
--- a/src/labs/stylekit/qqstylekitcontrols_p.h
+++ b/src/labs/stylekit/qqstylekitcontrols_p.h
@@ -58,6 +58,7 @@ class QQStyleKitControls : public QObject, public QQmlParserStatus
Q_PROPERTY(QQStyleKitControl *toolBar READ toolBar WRITE set_toolBar NOTIFY toolBarChanged FINAL)
Q_PROPERTY(QQStyleKitControl *toolButton READ toolButton WRITE set_toolButton NOTIFY toolButtonChanged FINAL)
Q_PROPERTY(QQStyleKitControl *toolSeparator READ toolSeparator WRITE set_toolSeparator NOTIFY toolSeparatorChanged FINAL)
+ Q_PROPERTY(QQStyleKitControl *toolTip READ toolTip WRITE set_toolTip NOTIFY toolTipChanged FINAL)
Q_PROPERTY(QQStyleKitControl *swipeDelegate READ swipeDelegate WRITE set_swipeDelegate NOTIFY swipeDelegateChanged FINAL)
Q_PROPERTY(QQStyleKitControl *switchControl READ switchControl WRITE set_switchControl NOTIFY switchControlChanged FINAL)
Q_PROPERTY(QQStyleKitControl *switchDelegate READ switchDelegate WRITE set_switchDelegate NOTIFY switchDelegateChanged FINAL)
@@ -118,6 +119,7 @@ public:
IMPLEMENT_ACCESSORS(toolBar)
IMPLEMENT_ACCESSORS(toolButton)
IMPLEMENT_ACCESSORS(toolSeparator)
+ IMPLEMENT_ACCESSORS(toolTip)
IMPLEMENT_ACCESSORS(swipeDelegate)
IMPLEMENT_ACCESSORS(switchControl)
IMPLEMENT_ACCESSORS(switchDelegate)
@@ -175,6 +177,7 @@ signals:
void toolBarChanged();
void toolButtonChanged();
void toolSeparatorChanged();
+ void toolTipChanged();
void swipeDelegateChanged();
void switchControlChanged();
void switchDelegateChanged();
diff --git a/src/labs/stylekit/qqstylekitpropertyresolver.cpp b/src/labs/stylekit/qqstylekitpropertyresolver.cpp
index 66e6abfd0f..020febcd64 100644
--- a/src/labs/stylekit/qqstylekitpropertyresolver.cpp
+++ b/src/labs/stylekit/qqstylekitpropertyresolver.cpp
@@ -69,8 +69,9 @@ const QList<QQStyleKitExtendableControlType> QQStyleKitPropertyResolver::baseTyp
static QList<QQStyleKitExtendableControlType> t =
{ QQStyleKitReader::ItemDelegate, QQStyleKitReader::Control };
return t; }
+ case QQStyleKitReader::Dialog:
case QQStyleKitReader::Menu:
- case QQStyleKitReader::Dialog: {
+ case QQStyleKitReader::ToolTip: {
static QList<QQStyleKitExtendableControlType> t =
{ QQStyleKitReader::Popup, QQStyleKitReader::Control };
return t; }
diff --git a/src/labs/stylekit/qqstylekitreader.cpp b/src/labs/stylekit/qqstylekitreader.cpp
index 2ae13093a5..b6dc6f8e70 100644
--- a/src/labs/stylekit/qqstylekitreader.cpp
+++ b/src/labs/stylekit/qqstylekitreader.cpp
@@ -103,6 +103,7 @@ QT_BEGIN_NAMESPACE
\value StyleReader.ToolBar \l {ToolBar}
\value StyleReader.ToolButton \l {ToolButton}
\value StyleReader.ToolSeparator \l {ToolSeparator}
+ \value StyleReader.ToolTip \l {ToolTip}
\sa {StyleVariation::controlType}{StyleVariation.controlType}
*/
diff --git a/src/labs/stylekit/qqstylekitreader_p.h b/src/labs/stylekit/qqstylekitreader_p.h
index 660a77f852..c0714efffe 100644
--- a/src/labs/stylekit/qqstylekitreader_p.h
+++ b/src/labs/stylekit/qqstylekitreader_p.h
@@ -83,6 +83,7 @@ public:
ToolBar,
ToolButton,
ToolSeparator,
+ ToolTip,
RadioButton,
RadioDelegate,
RoundButton,
diff --git a/src/labs/stylekit/qqstylekittheme.cpp b/src/labs/stylekit/qqstylekittheme.cpp
index d97222bfab..f398a7d8b7 100644
--- a/src/labs/stylekit/qqstylekittheme.cpp
+++ b/src/labs/stylekit/qqstylekittheme.cpp
@@ -96,6 +96,8 @@ static QQuickTheme::Scope scopeForType(QQStyleKitExtendableControlType type)
case QQStyleKitReader::ControlType::ToolButton:
case QQStyleKitReader::ControlType::ToolSeparator:
return QQuickTheme::ToolBar;
+ case QQStyleKitReader::ControlType::ToolTip:
+ return QQuickTheme::ToolTip;
default:
return QQuickTheme::System;
}