aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/controls/CheckDelegate.qml4
-rw-r--r--src/imports/controls/ComboBox.qml1
-rw-r--r--src/imports/controls/ItemDelegate.qml14
-rw-r--r--src/imports/controls/RadioDelegate.qml4
-rw-r--r--src/imports/controls/SwipeDelegate.qml14
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols-itemdelegate.gifbin12468 -> 14448 bytes
-rw-r--r--src/imports/controls/doc/snippets/qtquickcontrols-combobox-delegate.qml1
-rw-r--r--src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-background.qml2
-rw-r--r--src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-contentItem.qml2
-rw-r--r--src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-indicator.qml2
-rw-r--r--src/imports/controls/doc/snippets/qtquickcontrols-swipedelegate-indicator.qml1
-rw-r--r--src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc13
-rw-r--r--src/imports/controls/material/CheckIndicator.qml2
-rw-r--r--src/imports/controls/material/ItemDelegate.qml80
-rw-r--r--src/imports/controls/material/SwipeDelegate.qml79
-rw-r--r--src/imports/controls/universal/ItemDelegate.qml14
-rw-r--r--src/imports/controls/universal/MenuItem.qml4
-rw-r--r--src/imports/controls/universal/SwipeDelegate.qml14
-rw-r--r--src/templates/qquickabstractbutton.cpp16
-rw-r--r--src/templates/qquickabstractbutton_p.h4
-rw-r--r--src/templates/qquickbutton.cpp11
-rw-r--r--src/templates/qquickbutton_p.h6
-rw-r--r--src/templates/qquickmenuitem.cpp11
-rw-r--r--src/templates/qquickmenuitem_p.h3
-rw-r--r--tests/auto/controls/data/tst_button.qml19
-rw-r--r--tests/auto/controls/data/tst_combobox.qml1
-rw-r--r--tests/auto/controls/data/tst_menuitem.qml19
-rw-r--r--tests/manual/gifs/data/qtquickcontrols-itemdelegate.qml1
-rw-r--r--tests/manual/gifs/tst_gifs.cpp2
29 files changed, 108 insertions, 236 deletions
diff --git a/src/imports/controls/CheckDelegate.qml b/src/imports/controls/CheckDelegate.qml
index 4c5f0644..8d266b7d 100644
--- a/src/imports/controls/CheckDelegate.qml
+++ b/src/imports/controls/CheckDelegate.qml
@@ -53,8 +53,8 @@ T.CheckDelegate {
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/imports/controls/ComboBox.qml b/src/imports/controls/ComboBox.qml
index 6e3dc91b..dccc7c10 100644
--- a/src/imports/controls/ComboBox.qml
+++ b/src/imports/controls/ComboBox.qml
@@ -57,7 +57,6 @@ T.ComboBox {
delegate: ItemDelegate {
width: control.width
text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
- checkable: true
autoExclusive: true
checked: control.currentIndex === index
highlighted: control.highlightedIndex === index
diff --git a/src/imports/controls/ItemDelegate.qml b/src/imports/controls/ItemDelegate.qml
index 13a13e1e..f418788e 100644
--- a/src/imports/controls/ItemDelegate.qml
+++ b/src/imports/controls/ItemDelegate.qml
@@ -52,8 +52,8 @@ T.ItemDelegate {
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
+ rightPadding: !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
text: control.text
font: control.font
@@ -65,16 +65,6 @@ T.ItemDelegate {
}
//! [contentItem]
- //! [indicator]
- indicator: Image {
- x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
- y: control.topPadding + (control.availableHeight - height) / 2
-
- visible: control.checked
- source: control.checkable ? "qrc:/qt-project.org/imports/Qt/labs/controls/images/check.png" : ""
- }
- //! [indicator]
-
//! [background]
background: Rectangle {
implicitWidth: 100
diff --git a/src/imports/controls/RadioDelegate.qml b/src/imports/controls/RadioDelegate.qml
index 55186ae5..01b62767 100644
--- a/src/imports/controls/RadioDelegate.qml
+++ b/src/imports/controls/RadioDelegate.qml
@@ -52,8 +52,8 @@ T.RadioDelegate {
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/imports/controls/SwipeDelegate.qml b/src/imports/controls/SwipeDelegate.qml
index b3cf4714..45d6ed54 100644
--- a/src/imports/controls/SwipeDelegate.qml
+++ b/src/imports/controls/SwipeDelegate.qml
@@ -52,8 +52,8 @@ T.SwipeDelegate {
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
+ rightPadding: !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
text: control.text
font: control.font
@@ -73,16 +73,6 @@ T.SwipeDelegate {
}
//! [contentItem]
- //! [indicator]
- indicator: Image {
- x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
- y: control.topPadding + (control.availableHeight - height) / 2
-
- visible: control.checked
- source: control.checkable ? "qrc:/qt-project.org/imports/Qt/labs/controls/images/check.png" : ""
- }
- //! [indicator]
-
//! [background]
background: Rectangle {
color: control.pressed ? "#bdbebf" : "#eeeeee"
diff --git a/src/imports/controls/doc/images/qtquickcontrols-itemdelegate.gif b/src/imports/controls/doc/images/qtquickcontrols-itemdelegate.gif
index 7f8a2af8..0e8554ff 100644
--- a/src/imports/controls/doc/images/qtquickcontrols-itemdelegate.gif
+++ b/src/imports/controls/doc/images/qtquickcontrols-itemdelegate.gif
Binary files differ
diff --git a/src/imports/controls/doc/snippets/qtquickcontrols-combobox-delegate.qml b/src/imports/controls/doc/snippets/qtquickcontrols-combobox-delegate.qml
index 60f56940..1241eeaa 100644
--- a/src/imports/controls/doc/snippets/qtquickcontrols-combobox-delegate.qml
+++ b/src/imports/controls/doc/snippets/qtquickcontrols-combobox-delegate.qml
@@ -40,7 +40,6 @@ Item {
delegate: ItemDelegate {
width: combo.width
text: modelData
- checkable: true
autoExclusive: true
checked: combo.currentIndex === index
Rectangle {
diff --git a/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-background.qml b/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-background.qml
index 10d5696e..85aba1c8 100644
--- a/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-background.qml
+++ b/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-background.qml
@@ -30,8 +30,6 @@ import Qt.labs.controls 1.0
ItemDelegate {
text: "ItemDelegate"
- checked: true
- checkable: true
background: Rectangle {
color: 'transparent'
border.color: 'red'
diff --git a/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-contentItem.qml b/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-contentItem.qml
index 43e6f85e..aa7d5e2b 100644
--- a/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-contentItem.qml
+++ b/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-contentItem.qml
@@ -30,8 +30,6 @@ import Qt.labs.controls 1.0
ItemDelegate {
text: "ItemDelegate"
- checked: true
- checkable: true
Rectangle {
anchors.fill: contentItem
color: "transparent"
diff --git a/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-indicator.qml b/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-indicator.qml
index fb80957d..13e8b6cf 100644
--- a/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-indicator.qml
+++ b/src/imports/controls/doc/snippets/qtquickcontrols-itemdelegate-indicator.qml
@@ -30,8 +30,6 @@ import Qt.labs.controls 1.0
ItemDelegate {
text: "ItemDelegate"
- checked: true
- checkable: true
Rectangle {
anchors.fill: indicator
color: "transparent"
diff --git a/src/imports/controls/doc/snippets/qtquickcontrols-swipedelegate-indicator.qml b/src/imports/controls/doc/snippets/qtquickcontrols-swipedelegate-indicator.qml
index 22530e4b..e184dc64 100644
--- a/src/imports/controls/doc/snippets/qtquickcontrols-swipedelegate-indicator.qml
+++ b/src/imports/controls/doc/snippets/qtquickcontrols-swipedelegate-indicator.qml
@@ -31,7 +31,6 @@ import Qt.labs.controls 1.0
SwipeDelegate {
text: "SwipeDelegate"
checked: true
- checkable: true
Rectangle {
anchors.fill: indicator
color: "transparent"
diff --git a/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc
index 103da5fe..4975ac24 100644
--- a/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc
+++ b/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc
@@ -228,9 +228,7 @@
\section3 Indicator
- \image qtquickcontrols-itemdelegate-indicator.png
-
- \snippet ItemDelegate.qml indicator
+ ItemDelegate has no indicator item by default.
\section1 Customizing Label
@@ -505,8 +503,9 @@
\section1 Customizing SwipeDelegate
- SwipeDelegate consists of four visual items: \l {Control::background}{background},
- \l {Control::contentItem}{content item}, \c exposure.left, and \c exposure.right.
+ SwipeDelegate consists of five visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{content item}, \l {AbstractButton::indicator}{indicator},
+ \c exposure.left, and \c exposure.right.
\section3 Background
@@ -520,6 +519,10 @@
\snippet SwipeDelegate.qml contentItem
+ \section3 Indicator
+
+ SwipeDelegate has no indicator item by default.
+
\section3 Left, right, and behind
\image qtquickcontrols-swipedelegate.gif
diff --git a/src/imports/controls/material/CheckIndicator.qml b/src/imports/controls/material/CheckIndicator.qml
index 5c26e26f..962d4a9e 100644
--- a/src/imports/controls/material/CheckIndicator.qml
+++ b/src/imports/controls/material/CheckIndicator.qml
@@ -46,8 +46,6 @@ Rectangle {
border.width: control.checked ? width / 2 : 2
radius: 2
- visible: control.checkable
-
property alias control: ripple.control
Behavior on border.width {
diff --git a/src/imports/controls/material/ItemDelegate.qml b/src/imports/controls/material/ItemDelegate.qml
index 132cce3d..e3ec6bd9 100644
--- a/src/imports/controls/material/ItemDelegate.qml
+++ b/src/imports/controls/material/ItemDelegate.qml
@@ -37,7 +37,6 @@
import QtQuick 2.6
import Qt.labs.templates 1.0 as T
import Qt.labs.controls.material 1.0
-import Qt.labs.controls.material.impl 1.0
T.ItemDelegate {
id: control
@@ -52,85 +51,10 @@ T.ItemDelegate {
padding: 16
spacing: 16
- //! [indicator]
- indicator: Rectangle {
- id: indicatorItem
- x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
- y: control.topPadding + (control.availableHeight - height) / 2
- implicitWidth: 20
- implicitHeight: 20
- color: "transparent"
- border.color: control.checked ? control.Material.accentColor : control.Material.secondaryTextColor
- border.width: control.checked ? width / 2 : 2
- radius: 2
-
- visible: control.checkable
-
- Behavior on border.width {
- NumberAnimation {
- duration: 100
- easing.type: Easing.OutCubic
- }
- }
-
- Behavior on border.color {
- ColorAnimation {
- duration: 100
- easing.type: Easing.OutCubic
- }
- }
-
- Ripple {
- width: parent.width
- height: width
- control: control
- colored: control.checked
- opacity: control.pressed ? 1 : 0
- }
-
- // TODO: This needs to be transparent
- Image {
- id: checkImage
- x: (parent.width - width) / 2
- y: (parent.height - height) / 2
- width: 16
- height: 16
- source: "qrc:/qt-project.org/imports/Qt/labs/controls/material/images/check.png"
- fillMode: Image.PreserveAspectFit
-
- scale: control.checked ? 1 : 0
- Behavior on scale { NumberAnimation { duration: 100 } }
- }
-
- states: State {
- name: "checked"
- when: control.checked
- }
-
- transitions: Transition {
- SequentialAnimation {
- NumberAnimation {
- target: indicatorItem
- property: "scale"
- // Go down 2 pixels in size.
- to: 1 - 2 / indicatorItem.width
- duration: 120
- }
- NumberAnimation {
- target: indicatorItem
- property: "scale"
- to: 1
- duration: 120
- }
- }
- }
- }
- //! [indicator]
-
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: control.checkable && !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
+ rightPadding: control.checkable && control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/imports/controls/material/SwipeDelegate.qml b/src/imports/controls/material/SwipeDelegate.qml
index 34d546d7..c5942140 100644
--- a/src/imports/controls/material/SwipeDelegate.qml
+++ b/src/imports/controls/material/SwipeDelegate.qml
@@ -52,85 +52,10 @@ T.SwipeDelegate {
padding: 16
spacing: 16
- //! [indicator]
- indicator: Rectangle {
- id: indicatorItem
- x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
- y: control.topPadding + (control.availableHeight - height) / 2
- implicitWidth: 20
- implicitHeight: 20
- color: "transparent"
- border.color: control.checked ? control.Material.accentColor : control.Material.secondaryTextColor
- border.width: control.checked ? width / 2 : 2
- radius: 2
-
- visible: control.checkable
-
- Behavior on border.width {
- NumberAnimation {
- duration: 100
- easing.type: Easing.OutCubic
- }
- }
-
- Behavior on border.color {
- ColorAnimation {
- duration: 100
- easing.type: Easing.OutCubic
- }
- }
-
- Ripple {
- width: parent.width
- height: width
- control: control
- colored: control.checked
- opacity: control.pressed ? 1 : 0
- }
-
- // TODO: This needs to be transparent
- Image {
- id: checkImage
- x: (parent.width - width) / 2
- y: (parent.height - height) / 2
- width: 16
- height: 16
- source: "qrc:/qt-project.org/imports/Qt/labs/controls/material/images/check.png"
- fillMode: Image.PreserveAspectFit
-
- scale: control.checked ? 1 : 0
- Behavior on scale { NumberAnimation { duration: 100 } }
- }
-
- states: State {
- name: "checked"
- when: control.checked
- }
-
- transitions: Transition {
- SequentialAnimation {
- NumberAnimation {
- target: indicatorItem
- property: "scale"
- // Go down 2 pixels in size.
- to: 1 - 2 / indicatorItem.width
- duration: 120
- }
- NumberAnimation {
- target: indicatorItem
- property: "scale"
- to: 1
- duration: 120
- }
- }
- }
- }
- //! [indicator]
-
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
+ rightPadding: control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/imports/controls/universal/ItemDelegate.qml b/src/imports/controls/universal/ItemDelegate.qml
index d381086d..d8fc80e8 100644
--- a/src/imports/controls/universal/ItemDelegate.qml
+++ b/src/imports/controls/universal/ItemDelegate.qml
@@ -55,20 +55,10 @@ T.ItemDelegate {
rightPadding: 12
bottomPadding: 13
- //! [indicator]
- indicator: Image {
- x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
- y: control.topPadding + (control.availableHeight - height) / 2
-
- visible: control.checked
- source: !control.checkable ? "" : "image://universal/checkmark/" + (!control.enabled ? control.Universal.baseLowColor : control.pressed ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor)
- }
- //! [indicator]
-
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
+ rightPadding: control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/imports/controls/universal/MenuItem.qml b/src/imports/controls/universal/MenuItem.qml
index 128ef9da..22eaee61 100644
--- a/src/imports/controls/universal/MenuItem.qml
+++ b/src/imports/controls/universal/MenuItem.qml
@@ -56,8 +56,8 @@ T.MenuItem {
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.mirrored ? control.indicator.width + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/imports/controls/universal/SwipeDelegate.qml b/src/imports/controls/universal/SwipeDelegate.qml
index 7041e18e..aa1a68e9 100644
--- a/src/imports/controls/universal/SwipeDelegate.qml
+++ b/src/imports/controls/universal/SwipeDelegate.qml
@@ -55,20 +55,10 @@ T.SwipeDelegate {
rightPadding: 12
bottomPadding: 13
- //! [indicator]
- indicator: Image {
- x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
- y: control.topPadding + (control.availableHeight - height) / 2
-
- visible: control.checked
- source: !control.checkable ? "" : "image://universal/checkmark/" + (!control.enabled ? control.Universal.baseLowColor : control.pressed ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor)
- }
- //! [indicator]
-
//! [contentItem]
contentItem: Text {
- leftPadding: control.checkable && !control.mirrored ? control.indicator.width + control.spacing : 0
- rightPadding: control.checkable && control.mirrored ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
+ rightPadding: control.mirrored ? (control.indicator ? control.indicator.width : 0) + control.spacing : 0
text: control.text
font: control.font
diff --git a/src/templates/qquickabstractbutton.cpp b/src/templates/qquickabstractbutton.cpp
index 071b4964..2a462c03 100644
--- a/src/templates/qquickabstractbutton.cpp
+++ b/src/templates/qquickabstractbutton.cpp
@@ -303,11 +303,11 @@ void QQuickAbstractButton::setChecked(bool checked)
emit checkedChanged();
}
-/*!
- \qmlproperty bool Qt.labs.controls::AbstractButton::checkable
-
- This property holds whether the button is checkable.
-*/
+// We define these in QQuickAbstractButton without exposing checkable as a
+// property, and instead expose it as a property in QQuickButton.
+// QQuickRadioButton, QQuickSwitch and QQuickCheckBox are checkable by default,
+// but if we removed the checkable code from here, they'd each have to
+// duplicate it.
bool QQuickAbstractButton::isCheckable() const
{
Q_D(const QQuickAbstractButton);
@@ -322,7 +322,7 @@ void QQuickAbstractButton::setCheckable(bool checkable)
d->checkable = checkable;
setAccessibleProperty("checkable", checkable);
- emit checkableChanged();
+ checkableChange();
}
/*!
@@ -594,6 +594,10 @@ void QQuickAbstractButton::nextCheckState()
setChecked(!d->checked);
}
+void QQuickAbstractButton::checkableChange()
+{
+}
+
#ifndef QT_NO_ACCESSIBILITY
void QQuickAbstractButton::accessibilityActiveChanged(bool active)
{
diff --git a/src/templates/qquickabstractbutton_p.h b/src/templates/qquickabstractbutton_p.h
index 3877a96d..71aed622 100644
--- a/src/templates/qquickabstractbutton_p.h
+++ b/src/templates/qquickabstractbutton_p.h
@@ -60,7 +60,6 @@ class Q_QUICKTEMPLATES_EXPORT QQuickAbstractButton : public QQuickControl
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL)
Q_PROPERTY(bool pressed READ isPressed WRITE setPressed NOTIFY pressedChanged FINAL)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL)
- Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
Q_PROPERTY(bool highlighted READ isHighlighted WRITE setHighlighted NOTIFY highlightedChanged FINAL)
Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive NOTIFY autoExclusiveChanged FINAL)
Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat NOTIFY autoRepeatChanged FINAL)
@@ -107,7 +106,6 @@ Q_SIGNALS:
void textChanged();
void pressedChanged();
void checkedChanged();
- void checkableChanged();
void highlightedChanged();
void autoExclusiveChanged();
void autoRepeatChanged();
@@ -129,6 +127,8 @@ protected:
virtual void checkStateSet();
virtual void nextCheckState();
+ virtual void checkableChange();
+
#ifndef QT_NO_ACCESSIBILITY
void accessibilityActiveChanged(bool active) override;
QAccessible::Role accessibleRole() const override;
diff --git a/src/templates/qquickbutton.cpp b/src/templates/qquickbutton.cpp
index eba6395c..3dbab498 100644
--- a/src/templates/qquickbutton.cpp
+++ b/src/templates/qquickbutton.cpp
@@ -96,6 +96,17 @@ QQuickButton::QQuickButton(QQuickItem *parent) : QQuickAbstractButton(parent)
{
}
+/*!
+ \qmlproperty bool Qt.labs.controls::Button::checkable
+
+ This property holds whether the button is checkable.
+*/
+
+void QQuickButton::checkableChange()
+{
+ emit checkableChanged();
+}
+
QFont QQuickButton::defaultFont() const
{
return QQuickControlPrivate::themeFont(QPlatformTheme::PushButtonFont);
diff --git a/src/templates/qquickbutton_p.h b/src/templates/qquickbutton_p.h
index cfdf1044..00476313 100644
--- a/src/templates/qquickbutton_p.h
+++ b/src/templates/qquickbutton_p.h
@@ -55,11 +55,17 @@ QT_BEGIN_NAMESPACE
class Q_QUICKTEMPLATES_EXPORT QQuickButton : public QQuickAbstractButton
{
Q_OBJECT
+ Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
public:
explicit QQuickButton(QQuickItem *parent = nullptr);
+Q_SIGNALS:
+ void checkableChanged();
+
protected:
+ void checkableChange() override;
+
QFont defaultFont() const override;
};
diff --git a/src/templates/qquickmenuitem.cpp b/src/templates/qquickmenuitem.cpp
index a2b607b5..daf426e6 100644
--- a/src/templates/qquickmenuitem.cpp
+++ b/src/templates/qquickmenuitem.cpp
@@ -92,6 +92,17 @@ QQuickMenuItem::QQuickMenuItem(QQuickItem *parent) :
connect(this, &QQuickAbstractButton::clicked, this, &QQuickMenuItem::triggered);
}
+/*!
+ \qmlproperty bool Qt.labs.controls::MenuItem::checkable
+
+ This property holds whether the menu item is checkable.
+*/
+
+void QQuickMenuItem::checkableChange()
+{
+ emit checkableChanged();
+}
+
QFont QQuickMenuItem::defaultFont() const
{
return QQuickControlPrivate::themeFont(QPlatformTheme::MenuItemFont);
diff --git a/src/templates/qquickmenuitem_p.h b/src/templates/qquickmenuitem_p.h
index d73e1081..66f5fdad 100644
--- a/src/templates/qquickmenuitem_p.h
+++ b/src/templates/qquickmenuitem_p.h
@@ -57,14 +57,17 @@ class QQuickMenuItemPrivate;
class Q_QUICKTEMPLATES_EXPORT QQuickMenuItem : public QQuickAbstractButton
{
Q_OBJECT
+ Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
public:
explicit QQuickMenuItem(QQuickItem *parent = nullptr);
Q_SIGNALS:
+ void checkableChanged();
void triggered();
protected:
+ void checkableChange() override;
QFont defaultFont() const override;
#ifndef QT_NO_ACCESSIBILITY
diff --git a/tests/auto/controls/data/tst_button.qml b/tests/auto/controls/data/tst_button.qml
index 4127fbf2..978ab3c3 100644
--- a/tests/auto/controls/data/tst_button.qml
+++ b/tests/auto/controls/data/tst_button.qml
@@ -231,4 +231,23 @@ TestCase {
compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
control.destroy()
}
+
+ function test_checkable() {
+ var control = button.createObject(testCase)
+ verify(control)
+ verify(control.hasOwnProperty("checkable"))
+ verify(!control.checkable)
+
+ mouseClick(control)
+ verify(!control.checked)
+
+ control.checkable = true
+ mouseClick(control)
+ verify(control.checked)
+
+ mouseClick(control)
+ verify(!control.checked)
+
+ control.destroy()
+ }
}
diff --git a/tests/auto/controls/data/tst_combobox.qml b/tests/auto/controls/data/tst_combobox.qml
index d51f16fb..24df675e 100644
--- a/tests/auto/controls/data/tst_combobox.qml
+++ b/tests/auto/controls/data/tst_combobox.qml
@@ -641,7 +641,6 @@ TestCase {
width: _combobox.width
text: _combobox.textRole ? (Array.isArray(_combobox.model) ? modelData[_combobox.textRole] : model[_combobox.textRole]) : modelData
objectName: "delegate"
- checkable: true
autoExclusive: true
checked: _combobox.currentIndex === index
highlighted: _combobox.highlightedIndex === index
diff --git a/tests/auto/controls/data/tst_menuitem.qml b/tests/auto/controls/data/tst_menuitem.qml
index 8c9bc71b..7e6818da 100644
--- a/tests/auto/controls/data/tst_menuitem.qml
+++ b/tests/auto/controls/data/tst_menuitem.qml
@@ -61,4 +61,23 @@ TestCase {
compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset)
control.destroy()
}
+
+ function test_checkable() {
+ var control = menuItem.createObject(testCase)
+ verify(control)
+ verify(control.hasOwnProperty("checkable"))
+ verify(!control.checkable)
+
+ mouseClick(control)
+ verify(!control.checked)
+
+ control.checkable = true
+ mouseClick(control)
+ verify(control.checked)
+
+ mouseClick(control)
+ verify(!control.checked)
+
+ control.destroy()
+ }
}
diff --git a/tests/manual/gifs/data/qtquickcontrols-itemdelegate.qml b/tests/manual/gifs/data/qtquickcontrols-itemdelegate.qml
index 413cd085..f0c029a6 100644
--- a/tests/manual/gifs/data/qtquickcontrols-itemdelegate.qml
+++ b/tests/manual/gifs/data/qtquickcontrols-itemdelegate.qml
@@ -56,7 +56,6 @@ Window {
id: repeater
model: ["Option 1", "Option 2", "Option 3"]
delegate: ItemDelegate {
- checkable: true
text: modelData
}
}
diff --git a/tests/manual/gifs/tst_gifs.cpp b/tests/manual/gifs/tst_gifs.cpp
index 3b9cad02..bcc5b867 100644
--- a/tests/manual/gifs/tst_gifs.cpp
+++ b/tests/manual/gifs/tst_gifs.cpp
@@ -474,7 +474,7 @@ void tst_Gifs::delegates_data()
QTest::addColumn<QVector<int> >("pressIndices");
QTest::addColumn<int>("duration");
- QTest::newRow("ItemDelegate") << "itemdelegate" << (QVector<int>() << 0 << 0) << 5;
+ QTest::newRow("ItemDelegate") << "itemdelegate" << (QVector<int>() << 0 << 1 << 2) << 5;
QTest::newRow("CheckDelegate") << "checkdelegate" << (QVector<int>() << 0 << 0) << 5;
QTest::newRow("RadioDelegate") << "radiodelegate" << (QVector<int>() << 1 << 0) << 5;
}