aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-10-19 07:58:53 +0200
committerLiang Qi <liang.qi@qt.io>2016-10-19 09:01:43 +0200
commit124dd9adb5882048e44dcd012e08899d4e480196 (patch)
treef6022e22f08f2128df2b0cc2081c2b8843408aba
parent6cb2367f01c1f78d760c1a4d70002cf5a5046396 (diff)
parentd6fbb1239950f392f3d569da7dde226e865b7bcd (diff)
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts: src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate.qml src/imports/controls/material/qquickmaterialstyle.cpp Change-Id: I00b533e28407f87a31588e92109a468a5bfb4cc8
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-combobox.gifbin0 -> 7873 bytes
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-combobox.pngbin4984 -> 0 bytes
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gifbin0 -> 23801 bytes
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gifbin0 -> 42790 bytes
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gifbin0 -> 28882 bytes
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gifbin0 -> 23744 bytes
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols2-tooltip.pngbin1483 -> 6315 bytes
-rw-r--r--src/imports/controls/doc/snippets/screenshots/qtquickcontrols2-tooltip.qml6
-rw-r--r--src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc13
-rw-r--r--src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc15
-rw-r--r--src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc7
-rw-r--r--src/imports/controls/doc/src/qtquickcontrols2-input.qdoc2
-rw-r--r--src/imports/controls/material/qquickmaterialstyle.cpp14
-rw-r--r--src/imports/controls/material/qquickmaterialstyle_p.h4
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp56
-rw-r--r--src/quicktemplates2/qquickcontrol.cpp35
-rw-r--r--src/quicktemplates2/qquickcontrol_p.h1
-rw-r--r--src/quicktemplates2/qquickprogressbar.cpp2
-rw-r--r--src/quicktemplates2/qquickrangeslider.cpp21
-rw-r--r--src/quicktemplates2/qquickscrollbar.cpp6
-rw-r--r--src/quicktemplates2/qquickspinbox.cpp21
-rw-r--r--src/quicktemplates2/qquickstackview.cpp59
-rw-r--r--src/quicktemplates2/qquickswipedelegate.cpp12
-rw-r--r--src/quicktemplates2/qquicktabbutton.cpp6
-rw-r--r--src/quicktemplates2/qquicktextarea.cpp20
-rw-r--r--src/quicktemplates2/qquicktextfield.cpp20
-rw-r--r--src/quicktemplates2/qquicktoolbar.cpp6
-rw-r--r--src/quicktemplates2/qquicktumbler.cpp6
-rw-r--r--tests/auto/controls/data/tst_control.qml21
-rw-r--r--tests/auto/controls/data/tst_scrollbar.qml25
-rw-r--r--tests/manual/gifs/data/qtquickcontrols2-combobox.qml59
-rw-r--r--tests/manual/gifs/data/qtquickcontrols2-stackview-pop.qml102
-rw-r--r--tests/manual/gifs/data/qtquickcontrols2-stackview-push.qml97
-rw-r--r--tests/manual/gifs/data/qtquickcontrols2-stackview-replace.qml102
-rw-r--r--tests/manual/gifs/data/qtquickcontrols2-stackview-unwind.qml102
-rw-r--r--tests/manual/gifs/tst_gifs.cpp73
36 files changed, 807 insertions, 106 deletions
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-combobox.gif b/src/imports/controls/doc/images/qtquickcontrols2-combobox.gif
new file mode 100644
index 00000000..966a2d4a
--- /dev/null
+++ b/src/imports/controls/doc/images/qtquickcontrols2-combobox.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-combobox.png b/src/imports/controls/doc/images/qtquickcontrols2-combobox.png
deleted file mode 100644
index e687fb0e..00000000
--- a/src/imports/controls/doc/images/qtquickcontrols2-combobox.png
+++ /dev/null
Binary files differ
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif
new file mode 100644
index 00000000..1971c2e0
--- /dev/null
+++ b/src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif
new file mode 100644
index 00000000..0218cc0f
--- /dev/null
+++ b/src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif
new file mode 100644
index 00000000..63a6b2b4
--- /dev/null
+++ b/src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif
new file mode 100644
index 00000000..28c051d8
--- /dev/null
+++ b/src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png b/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png
index 0a4d57e5..902d6ee5 100644
--- a/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png
+++ b/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png
Binary files differ
diff --git a/src/imports/controls/doc/snippets/screenshots/qtquickcontrols2-tooltip.qml b/src/imports/controls/doc/snippets/screenshots/qtquickcontrols2-tooltip.qml
index ef08e174..3aa26908 100644
--- a/src/imports/controls/doc/snippets/screenshots/qtquickcontrols2-tooltip.qml
+++ b/src/imports/controls/doc/snippets/screenshots/qtquickcontrols2-tooltip.qml
@@ -42,10 +42,10 @@ Item {
//! [1]
Button {
- text: qsTr("Button")
+ text: qsTr("Save")
- ToolTip.visible: pressed
- ToolTip.text: qsTr("A descriptive tool tip of what the button does")
+ ToolTip.visible: down
+ ToolTip.text: qsTr("Save the active project")
}
//! [1]
}
diff --git a/src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc b/src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc
new file mode 100644
index 00000000..02d92de0
--- /dev/null
+++ b/src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc
@@ -0,0 +1,13 @@
+//! [notes]
+
+\note If the background item has no explicit size specified, it automatically
+ follows the control's size. In most cases, there is no need to specify
+ width or height for a background item.
+
+\note Most controls use the implicit size of the background item to calculate
+the implicit size of the control itself. If you replace the background item
+with a custom one, you should also consider providing a sensible implicit
+size for it (unless it is an item like \l Image which has its own implicit
+size).
+
+//! [notes]
diff --git a/src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc b/src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc
new file mode 100644
index 00000000..b69e9e60
--- /dev/null
+++ b/src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc
@@ -0,0 +1,15 @@
+This property holds the reason of the last focus change.
+
+\note This property does not indicate whether the control has \l {Item::activeFocus}
+ {active focus}, but the reason why the control either gained or lost focus.
+
+\value Qt.MouseFocusReason A mouse action occurred.
+\value Qt.TabFocusReason The Tab key was pressed.
+\value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab.
+\value Qt.ActiveWindowFocusReason The window system made this window either active or inactive.
+\value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus.
+\value Qt.ShortcutFocusReason The user typed a label's buddy shortcut
+\value Qt.MenuBarFocusReason The menu bar took focus.
+\value Qt.OtherFocusReason Another reason, usually application-specific.
+
+\sa Item::activeFocus
diff --git a/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc
index 03750844..84367278 100644
--- a/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc
+++ b/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc
@@ -52,6 +52,13 @@
\l BusyIndicator can be used to show that an operation is in progress,
and that the UI has to wait for the operation to complete.
+ \section1 ProgressBar Control
+
+ \image qtquickcontrols2-progressbar.gif
+
+ \l ProgressBar indicates the progress of an operation. The value should be
+ updated regularly.
+
\section1 ScrollBar Control
\image qtquickcontrols2-scrollbar.gif
diff --git a/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc
index c3583fd1..ce7b6aa4 100644
--- a/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc
+++ b/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc
@@ -42,7 +42,7 @@
\section1 ComboBox Control
- \image qtquickcontrols2-combobox.png
+ \image qtquickcontrols2-combobox.gif
\l ComboBox is used to select a value from a static multiple-line drop-down list.
It is not possible to add new values, and only one option can be selected.
diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp
index 3fb2a7f8..a4041d0d 100644
--- a/src/imports/controls/material/qquickmaterialstyle.cpp
+++ b/src/imports/controls/material/qquickmaterialstyle.cpp
@@ -400,6 +400,10 @@ static const QRgb hintTextColorLight = 0x60000000;
static const QRgb hintTextColorDark = 0x4CFFFFFF;
static const QRgb dividerColorLight = 0x1E000000;
static const QRgb dividerColorDark = 0x1EFFFFFF;
+static const QRgb iconColorLight = 0x89000000;
+static const QRgb iconColorDark = 0xFFFFFFFF;
+static const QRgb iconDisabledColorLight = 0x42000000;
+static const QRgb iconDisabledColorDark = 0x4CFFFFFF;
static const QRgb raisedButtonColorLight = 0xFFD6D7D7;
static const QRgb raisedButtonColorDark = 0x3FCCCCCC;
static const QRgb raisedButtonDisabledColorLight = dividerColorLight;
@@ -853,6 +857,16 @@ QColor QQuickMaterialStyle::dividerColor() const
return QColor::fromRgba(m_theme == Light ? dividerColorLight : dividerColorDark);
}
+QColor QQuickMaterialStyle::iconColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? iconColorLight : iconColorDark);
+}
+
+QColor QQuickMaterialStyle::iconDisabledColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? iconDisabledColorLight : iconDisabledColorDark);
+}
+
QColor QQuickMaterialStyle::buttonColor(bool highlighted) const
{
Shade shade = themeShade();
diff --git a/src/imports/controls/material/qquickmaterialstyle_p.h b/src/imports/controls/material/qquickmaterialstyle_p.h
index 6ff779a5..938bc4c2 100644
--- a/src/imports/controls/material/qquickmaterialstyle_p.h
+++ b/src/imports/controls/material/qquickmaterialstyle_p.h
@@ -74,6 +74,8 @@ class QQuickMaterialStyle : public QQuickStyleAttached
Q_PROPERTY(QColor textSelectionColor READ textSelectionColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor dropShadowColor READ dropShadowColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor dividerColor READ dividerColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor iconColor READ iconColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor iconDisabledColor READ iconDisabledColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor buttonColor READ buttonColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor buttonDisabledColor READ buttonDisabledColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor highlightedButtonColor READ highlightedButtonColor NOTIFY paletteChanged FINAL)
@@ -195,6 +197,8 @@ public:
QColor textSelectionColor() const;
QColor dropShadowColor() const;
QColor dividerColor() const;
+ QColor iconColor() const;
+ QColor iconDisabledColor() const;
QColor buttonColor() const;
QColor buttonDisabledColor() const;
QColor highlightedButtonColor() const;
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index dbcf1cfa..3aa67688 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -58,15 +58,15 @@ QT_BEGIN_NAMESPACE
\ingroup qtquickcontrols2-input
\brief A combined button and popup list taking minimal space.
- \image qtquickcontrols2-combobox.png
+ \image qtquickcontrols2-combobox.gif
ComboBox is a combined button and popup list. It provides a means of
presenting a list of options to the user in a way that takes up the
minimum amount of screen space.
ComboBox is populated with a data model. The data model is commonly
- a JavaScript array, a \l ListModel or an integer, but also other types
- of \l {qml-data-models}{data models} are supported.
+ a JavaScript array, a \l ListModel or an integer, but other types
+ of \l {qml-data-models}{data models} are also supported.
\code
ComboBox {
@@ -74,6 +74,8 @@ QT_BEGIN_NAMESPACE
}
\endcode
+ \section1 ComboBox Model Roles
+
ComboBox is able to visualize standard \l {qml-data-models}{data models}
that provide the \c modelData role:
\list
@@ -108,6 +110,12 @@ QT_BEGIN_NAMESPACE
This signal is emitted when the item at \a index is activated by the user.
+ An item is activated when it is selected while the popup is open,
+ causing the popup to close (and \l currentIndex to change),
+ or while the popup is closed and the combo box is navigated via
+ keyboard, causing the \l currentIndex to change.
+ The \l currentIndex property is set to \a index.
+
\sa currentIndex
*/
@@ -116,6 +124,9 @@ QT_BEGIN_NAMESPACE
This signal is emitted when the item at \a index in the popup list is highlighted by the user.
+ The highlighted signal is only emitted when the popup is open and an item
+ is highlighted, but not necessarily \l activated.
+
\sa highlightedIndex
*/
@@ -499,6 +510,10 @@ void QQuickComboBox::setPressed(bool pressed)
This property holds the index of the highlighted item in the combo box popup list.
+ When a highlighted item is activated, the popup is closed, \l currentIndex
+ is set to \c highlightedIndex, and the value of this property is reset to
+ \c -1, as there is no longer a highlighted item.
+
\sa highlighted(), currentIndex
*/
int QQuickComboBox::highlightedIndex() const
@@ -512,7 +527,7 @@ int QQuickComboBox::highlightedIndex() const
This property holds the index of the current item in the combo box.
- \sa activated(), currentText
+ \sa activated(), currentText, highlightedIndex
*/
int QQuickComboBox::currentIndex() const
{
@@ -598,7 +613,10 @@ void QQuickComboBox::resetDisplayText()
This property holds the model role used for populating the combo box.
- \sa model, currentText, displayText
+ When the model has multiple roles, \c textRole can be set to determine
+ which role should be displayed.
+
+ \sa model, currentText, displayText, {ComboBox Model Roles}
*/
QString QQuickComboBox::textRole() const
{
@@ -623,6 +641,22 @@ void QQuickComboBox::setTextRole(const QString &role)
This property holds a delegate that presents an item in the combo box popup.
+ It is recommended to use \l ItemDelegate (or any other \l AbstractButton
+ derivatives) as the delegate. This ensures that the interaction works as
+ expected, and the popup will automatically close when appropriate. When
+ other types are used as the delegate, the popup must be closed manually.
+ For example, if \l MouseArea is used:
+
+ \code
+ delegate: Rectangle {
+ // ...
+ MouseArea {
+ // ...
+ onClicked: comboBox.popup.close()
+ }
+ }
+ \endcode
+
\sa ItemDelegate, {Customizing ComboBox}
*/
QQmlComponent *QQuickComboBox::delegate() const
@@ -649,6 +683,8 @@ void QQuickComboBox::setDelegate(QQmlComponent* delegate)
\qmlproperty Item QtQuick.Controls::ComboBox::indicator
This property holds the drop indicator item.
+
+ \sa {Customizing ComboBox}
*/
QQuickItem *QQuickComboBox::indicator() const
{
@@ -676,6 +712,12 @@ void QQuickComboBox::setIndicator(QQuickItem *indicator)
This property holds the popup.
+ The popup can be opened or closed manually, if necessary:
+
+ \code
+ onSpecialEvent: comboBox.popup.close()
+ \endcode
+
\sa {Customizing ComboBox}
*/
QQuickPopup *QQuickComboBox::popup() const
@@ -792,7 +834,7 @@ int QQuickComboBox::find(const QString &text, Qt::MatchFlags flags) const
\qmlmethod void QtQuick.Controls::ComboBox::incrementCurrentIndex()
Increments the current index of the combo box, or the highlighted
- index if the popup list when it is visible.
+ index if the popup list is visible.
\sa currentIndex, highlightedIndex
*/
@@ -806,7 +848,7 @@ void QQuickComboBox::incrementCurrentIndex()
\qmlmethod void QtQuick.Controls::ComboBox::decrementCurrentIndex()
Decrements the current index of the combo box, or the highlighted
- index if the popup list when it is visible.
+ index if the popup list is visible.
\sa currentIndex, highlightedIndex
*/
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp
index 0a0b7fad..157c539e 100644
--- a/src/quicktemplates2/qquickcontrol.cpp
+++ b/src/quicktemplates2/qquickcontrol.cpp
@@ -935,21 +935,9 @@ void QQuickControl::setFocusPolicy(Qt::FocusPolicy policy)
\qmlproperty enumeration QtQuick.Controls::Control::focusReason
\readonly
- This property holds the reason of the last focus change.
+ \include qquickcontrol-focusreason.qdocinc
- \note This property does not indicate whether the control has \l {Item::activeFocus}
- {active focus}, but the reason why the control either gained or lost focus.
-
- \value Qt.MouseFocusReason A mouse action occurred.
- \value Qt.TabFocusReason The Tab key was pressed.
- \value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab.
- \value Qt.ActiveWindowFocusReason The window system made this window either active or inactive.
- \value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus.
- \value Qt.ShortcutFocusReason The user typed a label's buddy shortcut
- \value Qt.MenuBarFocusReason The menu bar took focus.
- \value Qt.OtherFocusReason Another reason, usually application-specific.
-
- \sa visualFocus, Item::activeFocus
+ \sa visualFocus
*/
Qt::FocusReason QQuickControl::focusReason() const
{
@@ -1094,15 +1082,7 @@ void QQuickControl::setWheelEnabled(bool enabled)
}
\endcode
- \note If the background item has no explicit size specified, it automatically
- follows the control's size. In most cases, there is no need to specify
- width or height for a background item.
-
- \note Most controls use the implicit size of the background item to calculate
- the implicit size of the control itself. If you replace the background item
- with a custom one, you should also consider providing a sensible implicit
- size for it (unless it is an item like \l Image which has its own implicit
- size).
+ \input qquickcontrol-background.qdocinc notes
\sa {Control Layout}
*/
@@ -1232,6 +1212,13 @@ void QQuickControl::hoverEnterEvent(QHoverEvent *event)
event->setAccepted(d->hoverEnabled);
}
+void QQuickControl::hoverMoveEvent(QHoverEvent *event)
+{
+ Q_D(QQuickControl);
+ setHovered(d->hoverEnabled && contains(event->pos()));
+ event->setAccepted(d->hoverEnabled);
+}
+
void QQuickControl::hoverLeaveEvent(QHoverEvent *event)
{
Q_D(QQuickControl);
@@ -1250,6 +1237,8 @@ void QQuickControl::mousePressEvent(QMouseEvent *event)
void QQuickControl::mouseMoveEvent(QMouseEvent *event)
{
+ Q_D(QQuickControl);
+ setHovered(d->hoverEnabled && contains(event->pos()));
event->accept();
}
diff --git a/src/quicktemplates2/qquickcontrol_p.h b/src/quicktemplates2/qquickcontrol_p.h
index d3064f54..7187344a 100644
--- a/src/quicktemplates2/qquickcontrol_p.h
+++ b/src/quicktemplates2/qquickcontrol_p.h
@@ -177,6 +177,7 @@ protected:
void focusInEvent(QFocusEvent *event) override;
void focusOutEvent(QFocusEvent *event) override;
void hoverEnterEvent(QHoverEvent *event) override;
+ void hoverMoveEvent(QHoverEvent *event) override;
void hoverLeaveEvent(QHoverEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
diff --git a/src/quicktemplates2/qquickprogressbar.cpp b/src/quicktemplates2/qquickprogressbar.cpp
index 00ecc5c5..7bf30318 100644
--- a/src/quicktemplates2/qquickprogressbar.cpp
+++ b/src/quicktemplates2/qquickprogressbar.cpp
@@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE
}
\endcode
- \sa {Customizing ProgressBar}, BusyIndicator
+ \sa {Customizing ProgressBar}, BusyIndicator, {Indicator Controls}
*/
class QQuickProgressBarPrivate : public QQuickControlPrivate
diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp
index a4862fa6..3caf5042 100644
--- a/src/quicktemplates2/qquickrangeslider.cpp
+++ b/src/quicktemplates2/qquickrangeslider.cpp
@@ -56,13 +56,27 @@ QT_BEGIN_NAMESPACE
RangeSlider is used to select a range specified by two values, by sliding
each handle along a track.
+ In the example below, custom \l from and \l to values are set, and the
+ initial positions of the \l first and \l second handles are set:
+
\code
RangeSlider {
- first.value: 0.25
- second.value: 0.75
+ from: 1
+ to: 100
+ first.value: 25
+ second.value: 75
}
\endcode
+ The \l {first.position} and \l {second.position} properties are defined as a
+ percentage of the control's size, scaled within the range \c {0.0 - 1.0}.
+ The \l {first.visualPosition} and \l {second.visualPosition} properties are
+ the same, except that they are reversed in a
+ \l {Right-to-left User Interfaces}{right-to-left} application.
+ The \c visualPosition is useful for positioning the handles when styling
+ RangeSlider. In the example above, \l {first.visualPosition} will be \c 0.24
+ in a left-to-right application, and \c 0.76 in a right-to-left application.
+
\sa {Customizing RangeSlider}, {Input Controls}
*/
@@ -596,6 +610,9 @@ void QQuickRangeSlider::setStepSize(qreal step)
\value RangeSlider.SnapAlways The slider snaps while the handle is dragged.
\value RangeSlider.SnapOnRelease The slider does not snap while being dragged, but only after the handle is released.
+ For visual explanations of the various modes, see the
+ \l {Slider::}{snapMode} documentation of \l Slider.
+
\sa stepSize
*/
QQuickRangeSlider::SnapMode QQuickRangeSlider::snapMode() const
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp
index ead17cb8..ebccbcba 100644
--- a/src/quicktemplates2/qquickscrollbar.cpp
+++ b/src/quicktemplates2/qquickscrollbar.cpp
@@ -334,9 +334,10 @@ void QQuickScrollBar::increase()
{
Q_D(QQuickScrollBar);
qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize;
+ bool wasActive = d->active;
setActive(true);
setPosition(d->position + step);
- setActive(false);
+ setActive(wasActive);
}
/*!
@@ -350,9 +351,10 @@ void QQuickScrollBar::decrease()
{
Q_D(QQuickScrollBar);
qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize;
+ bool wasActive = d->active;
setActive(true);
setPosition(d->position - step);
- setActive(false);
+ setActive(wasActive);
}
void QQuickScrollBar::mousePressEvent(QMouseEvent *event)
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp
index 72dac1c6..ec801b1a 100644
--- a/src/quicktemplates2/qquickspinbox.cpp
+++ b/src/quicktemplates2/qquickspinbox.cpp
@@ -456,6 +456,12 @@ void QQuickSpinBox::setValidator(QValidator *validator)
This property holds a callback function that is called whenever
an integer value needs to be converted to display text.
+ The default function can be overridden to display custom text for a given
+ value. This applies to both editable and non-editable spinboxes;
+ for example, when using the up and down buttons or a mouse wheel to
+ increment and decrement the value, the new value is converted to display
+ text using this function.
+
The callback function signature is \c {string function(value, locale)}.
The function can have one or two arguments, where the first argument
is the value to be converted, and the optional second argument is the
@@ -467,6 +473,10 @@ void QQuickSpinBox::setValidator(QValidator *validator)
textFromValue: function(value, locale) { return Number(value).toLocaleString(locale, 'f', 0); }
\endcode
+ \note When applying a custom \c textFromValue implementation for editable
+ spinboxes, a matching \l valueFromText implementation must be provided
+ to be able to convert the custom text back to an integer value.
+
\sa valueFromText, validator, {Control::locale}{locale}
*/
QJSValue QQuickSpinBox::textFromValue() const
@@ -497,6 +507,9 @@ void QQuickSpinBox::setTextFromValue(const QJSValue &callback)
This property holds a callback function that is called whenever
input text needs to be converted to an integer value.
+ This function only needs to be overridden when \l textFromValue
+ is overridden for an editable spinbox.
+
The callback function signature is \c {int function(text, locale)}.
The function can have one or two arguments, where the first argument
is the text to be converted, and the optional second argument is the
@@ -508,6 +521,10 @@ void QQuickSpinBox::setTextFromValue(const QJSValue &callback)
valueFromText: function(text, locale) { return Number.fromLocaleString(locale, text); }
\endcode
+ \note When applying a custom \l textFromValue implementation for editable
+ spinboxes, a matching \c valueFromText implementation must be provided
+ to be able to convert the custom text back to an integer value.
+
\sa textFromValue, validator, {Control::locale}{locale}
*/
QJSValue QQuickSpinBox::valueFromText() const
@@ -569,7 +586,7 @@ QQuickSpinButton *QQuickSpinBox::down() const
/*!
\qmlmethod void QtQuick.Controls::SpinBox::increase()
- Increases the value by \l stepSize.
+ Increases the value by \l stepSize, or \c 1 if stepSize is not defined.
\sa stepSize
*/
@@ -582,7 +599,7 @@ void QQuickSpinBox::increase()
/*!
\qmlmethod void QtQuick.Controls::SpinBox::decrease()
- Decreases the value by \l stepSize.
+ Decreases the value by \l stepSize, or \c 1 if stepSize is not defined.
\sa stepSize
*/
diff --git a/src/quicktemplates2/qquickstackview.cpp b/src/quicktemplates2/qquickstackview.cpp
index 040eff1b..c4bba4c8 100644
--- a/src/quicktemplates2/qquickstackview.cpp
+++ b/src/quicktemplates2/qquickstackview.cpp
@@ -126,6 +126,33 @@ QT_BEGIN_NAMESPACE
application UI, "pop" navigates backward, and "replace" replaces the
\l currentItem.
+ \section2 Pushing Items
+
+ In the following animation, three \l Label controls are pushed onto a
+ stack view with the \l push() function:
+
+ \image qtquickcontrols2-stackview-push.gif
+
+ The stack now contains the following items: \c [A, B, C].
+
+ \note When the stack is empty, a push() operation will not have a
+ transition animation because there is nothing to transition from (typically
+ on application start-up).
+
+ \section2 Popping Items
+
+ Continuing on from the example above, the topmost item on the stack is
+ removed with a call to \l pop():
+
+ \image qtquickcontrols2-stackview-pop.gif
+
+ The stack now contains the following items: \c [A, B].
+
+ \note A pop() operation on a stack with depth 1 or 0 does nothing. In such
+ cases, the stack can be emptied using the \l clear() method.
+
+ \section3 Unwinding Items via Pop
+
Sometimes, it is necessary to go back more than a single step in the stack.
For example, to return to a "main" item or some kind of section item in the
application. In such cases, it is possible to specify an item as a
@@ -135,22 +162,20 @@ QT_BEGIN_NAMESPACE
explicitly unwind to the bottom of the stack, it is recommended to use
\l{pop()}{pop(null)}, although any non-existent item will do.
- Given the stack [A, B, C]:
+ In the following animation, we unwind the stack to the first item by
+ calling \c pop(null):
- \list
- \li \l{push()}{push(D)} => [A, B, C, D] - "push" transition animation
- between C and D
- \li pop() => [A, B] - "pop" transition animation between C and B
- \li \l{replace()}{replace(D)} => [A, B, D] - "replace" transition between
- C and D
- \li \l{pop()}{pop(A)} => [A] - "pop" transition between C and A
- \endlist
+ \image qtquickcontrols2-stackview-unwind.gif
- \note When the stack is empty, a push() operation will not have a
- transition animation because there is nothing to transition from (typically
- on application start-up). A pop() operation on a stack with depth 1 or
- 0 does nothing. In such cases, the stack can be emptied using the clear()
- method.
+ The stack now contains a single item: \c [A].
+
+ \section2 Replacing Items
+
+ In the following animation, we \l replace the topmost item with \c D:
+
+ \image qtquickcontrols2-stackview-replace.gif
+
+ The stack now contains the following items: \c [A, B, D].
\section1 Deep Linking
@@ -439,7 +464,7 @@ QQuickItem *QQuickStackView::find(const QJSValue &callback, LoadBehavior behavio
\value StackView.ReplaceTransition An operation with replace transitions (since QtQuick.Controls 2.1).
\value StackView.PopTransition An operation with pop transitions (since QtQuick.Controls 2.1).
- \sa initialItem
+ \sa initialItem, {Pushing Items}
*/
void QQuickStackView::push(QQmlV4Function *args)
{
@@ -513,7 +538,7 @@ void QQuickStackView::push(QQmlV4Function *args)
stackView.pop(null)
\endcode
- \sa clear()
+ \sa clear(), {Popping Items}, {Unwinding Items via Pop}
*/
void QQuickStackView::pop(QQmlV4Function *args)
{
@@ -663,7 +688,7 @@ void QQuickStackView::pop(QQmlV4Function *args)
}
\endcode
- \sa push()
+ \sa push(), {Replacing Items}
*/
void QQuickStackView::replace(QQmlV4Function *args)
{
diff --git a/src/quicktemplates2/qquickswipedelegate.cpp b/src/quicktemplates2/qquickswipedelegate.cpp
index 4bbcc0a5..485de914 100644
--- a/src/quicktemplates2/qquickswipedelegate.cpp
+++ b/src/quicktemplates2/qquickswipedelegate.cpp
@@ -59,9 +59,15 @@ QT_BEGIN_NAMESPACE
expose more options or information. It is used as a delegate in views such
as \l ListView.
- SwipeDelegate inherits its API from AbstractButton. For instance, you can set
- \l {AbstractButton::text}{text} and react to
- \l {AbstractButton::clicked}{clicks} using the AbstractButton API.
+ In the following example, SwipeDelegate is used in a \l ListView to allow
+ items to be removed from it by swiping to the left:
+
+ \snippet qtquickcontrols2-swipedelegate.qml 1
+
+ SwipeDelegate inherits its API from \l ItemDelegate, which is inherited
+ from AbstractButton. For instance, you can set \l {AbstractButton::text}{text},
+ and react to \l {AbstractButton::clicked}{clicks} using the AbstractButton
+ API.
Information regarding the progress of a swipe, as well as the components
that should be shown upon swiping, are both available through the
diff --git a/src/quicktemplates2/qquicktabbutton.cpp b/src/quicktemplates2/qquicktabbutton.cpp
index 6c8ba1f4..3f097947 100644
--- a/src/quicktemplates2/qquicktabbutton.cpp
+++ b/src/quicktemplates2/qquicktabbutton.cpp
@@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
\inqmlmodule QtQuick.Controls
\since 5.7
\ingroup qtquickcontrols2-navigation
- \brief A tab button control that can be found on a TabBar.
+ \brief A tab button control that can be used in a TabBar.
\image qtquickcontrols2-tabbutton.png
@@ -56,6 +56,10 @@ QT_BEGIN_NAMESPACE
\snippet qtquickcontrols2-tabbutton.qml 1
+ TabButton inherits its API from AbstractButton. For instance, you can set
+ \l {AbstractButton::text}{text}, and react to \l {AbstractButton::clicked}{clicks}
+ using the AbstractButton API.
+
\sa TabBar, {Customizing TabButton}, {Button Controls}, {Navigation Controls}
*/
diff --git a/src/quicktemplates2/qquicktextarea.cpp b/src/quicktemplates2/qquicktextarea.cpp
index 41980073..9a5590a5 100644
--- a/src/quicktemplates2/qquicktextarea.cpp
+++ b/src/quicktemplates2/qquicktextarea.cpp
@@ -432,9 +432,7 @@ void QQuickTextArea::setFont(const QFont &font)
This property holds the background item.
- \note If the background item has no explicit size specified, it automatically
- follows the control's size. In most cases, there is no need to specify
- width or height for a background item.
+ \input qquickcontrol-background.qdocinc notes
\sa {Customizing TextArea}
*/
@@ -491,21 +489,7 @@ void QQuickTextArea::setPlaceholderText(const QString &text)
/*!
\qmlproperty enumeration QtQuick.Controls::TextArea::focusReason
- This property holds the reason of the last focus change.
-
- \note This property does not indicate whether the control has \l {Item::activeFocus}
- {active focus}, but the reason why the control either gained or lost focus.
-
- \value Qt.MouseFocusReason A mouse action occurred.
- \value Qt.TabFocusReason The Tab key was pressed.
- \value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab.
- \value Qt.ActiveWindowFocusReason The window system made this window either active or inactive.
- \value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus.
- \value Qt.ShortcutFocusReason The user typed a label's buddy shortcut
- \value Qt.MenuBarFocusReason The menu bar took focus.
- \value Qt.OtherFocusReason Another reason, usually application-specific.
-
- \sa Item::activeFocus
+ \include qquickcontrol-focusreason.qdocinc
*/
Qt::FocusReason QQuickTextArea::focusReason() const
{
diff --git a/src/quicktemplates2/qquicktextfield.cpp b/src/quicktemplates2/qquicktextfield.cpp
index 8bdbe3cb..85712865 100644
--- a/src/quicktemplates2/qquicktextfield.cpp
+++ b/src/quicktemplates2/qquicktextfield.cpp
@@ -313,9 +313,7 @@ void QQuickTextField::setFont(const QFont &font)
This property holds the background item.
- \note If the background item has no explicit size specified, it automatically
- follows the control's size. In most cases, there is no need to specify
- width or height for a background item.
+ \input qquickcontrol-background.qdocinc notes
\sa {Customizing TextField}
*/
@@ -372,21 +370,7 @@ void QQuickTextField::setPlaceholderText(const QString &text)
/*!
\qmlproperty enumeration QtQuick.Controls::TextField::focusReason
- This property holds the reason of the last focus change.
-
- \note This property does not indicate whether the control has \l {Item::activeFocus}
- {active focus}, but the reason why the control either gained or lost focus.
-
- \value Qt.MouseFocusReason A mouse action occurred.
- \value Qt.TabFocusReason The Tab key was pressed.
- \value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab.
- \value Qt.ActiveWindowFocusReason The window system made this window either active or inactive.
- \value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus.
- \value Qt.ShortcutFocusReason The user typed a label's buddy shortcut
- \value Qt.MenuBarFocusReason The menu bar took focus.
- \value Qt.OtherFocusReason Another reason, usually application-specific.
-
- \sa Item::activeFocus
+ \include qquickcontrol-focusreason.qdocinc
*/
Qt::FocusReason QQuickTextField::focusReason() const
{
diff --git a/src/quicktemplates2/qquicktoolbar.cpp b/src/quicktemplates2/qquicktoolbar.cpp
index 9342c27a..5a767c73 100644
--- a/src/quicktemplates2/qquicktoolbar.cpp
+++ b/src/quicktemplates2/qquicktoolbar.cpp
@@ -46,7 +46,7 @@ QT_BEGIN_NAMESPACE
\inqmlmodule QtQuick.Controls
\since 5.7
\ingroup qtquickcontrols2-containers
- \brief A container with context-sensitive controls.
+ \brief A container for context-sensitive controls.
ToolBar is a container of application-wide and context sensitive
actions and controls, such as navigation buttons and search fields.
@@ -109,8 +109,8 @@ QQuickToolBar::QQuickToolBar(QQuickItem *parent) :
This property holds the position of the toolbar.
- \note If the toolbar is assigned as a header or footer of ApplicationWindow
- or Page, the appropriate position is set automatically.
+ \note If the toolbar is assigned as a header or footer of \l ApplicationWindow
+ or \l Page, the appropriate position is set automatically.
Possible values:
\value ToolBar.Header The toolbar is at the top, as a window or page header.
diff --git a/src/quicktemplates2/qquicktumbler.cpp b/src/quicktemplates2/qquicktumbler.cpp
index b7e47ec8..49a9c087 100644
--- a/src/quicktemplates2/qquicktumbler.cpp
+++ b/src/quicktemplates2/qquicktumbler.cpp
@@ -52,6 +52,8 @@ QT_BEGIN_NAMESPACE
\ingroup qtquickcontrols2-input
\brief A spinnable wheel of items that can be selected.
+ \image qtquickcontrols2-tumbler-wrap.gif
+
\code
Tumbler {
model: 5
@@ -80,8 +82,6 @@ QT_BEGIN_NAMESPACE
\snippet qtquickcontrols2-tumbler-timePicker.qml tumbler
- \image qtquickcontrols2-tumbler-wrap.gif
-
\sa {Customizing Tumbler}, {Input Controls}
*/
@@ -364,7 +364,7 @@ QQuickItem *QQuickTumbler::currentItem() const
}
/*!
- \qmlproperty component QtQuick.Controls::Tumbler::delegate
+ \qmlproperty Component QtQuick.Controls::Tumbler::delegate
This property holds the delegate used to display each item.
*/
diff --git a/tests/auto/controls/data/tst_control.qml b/tests/auto/controls/data/tst_control.qml
index f07f6051..1b60eb73 100644
--- a/tests/auto/controls/data/tst_control.qml
+++ b/tests/auto/controls/data/tst_control.qml
@@ -847,8 +847,15 @@ TestCase {
compare(control.mirroredspy_5.count, 1)
}
- function test_hover() {
- var control = component.createObject(testCase, {width: 100, height: 100})
+ function test_hover_data() {
+ return [
+ { tag: "normal", target: component, pressed: false },
+ { tag: "pressed", target: button, pressed: true }
+ ]
+ }
+
+ function test_hover(data) {
+ var control = data.target.createObject(testCase, {width: 100, height: 100})
verify(control)
compare(control.hovered, false)
@@ -864,9 +871,19 @@ TestCase {
mouseMove(control, control.width / 2, control.height / 2)
compare(control.hovered, true)
+ if (data.pressed) {
+ mousePress(control, control.width / 2, control.height / 2)
+ compare(control.hovered, true)
+ }
+
mouseMove(control, -10, -10)
compare(control.hovered, false)
+ if (data.pressed) {
+ mouseRelease(control, -10, control.height / 2)
+ compare(control.hovered, false)
+ }
+
mouseMove(control, control.width / 2, control.height / 2)
compare(control.hovered, true)
diff --git a/tests/auto/controls/data/tst_scrollbar.qml b/tests/auto/controls/data/tst_scrollbar.qml
index 27d055da..15b4b3f0 100644
--- a/tests/auto/controls/data/tst_scrollbar.qml
+++ b/tests/auto/controls/data/tst_scrollbar.qml
@@ -215,6 +215,31 @@ TestCase {
control.destroy()
}
+ function test_increase_decrease_data() {
+ return [
+ { tag: "increase:active", increase: true, active: true },
+ { tag: "decrease:active", increase: false, active: true },
+ { tag: "increase:inactive", increase: true, active: false },
+ { tag: "decrease:inactive", increase: false, active: false }
+ ]
+ }
+
+ function test_increase_decrease(data) {
+ var control = scrollBar.createObject(testCase, {position: 0.5, active: data.active})
+ verify(control)
+
+ if (data.increase) {
+ control.increase()
+ compare(control.position, 0.6)
+ } else {
+ control.decrease()
+ compare(control.position, 0.4)
+ }
+ compare(control.active, data.active)
+
+ control.destroy()
+ }
+
function test_stepSize_data() {
return [
{ tag: "0.0", stepSize: 0.0 },
diff --git a/tests/manual/gifs/data/qtquickcontrols2-combobox.qml b/tests/manual/gifs/data/qtquickcontrols2-combobox.qml
new file mode 100644
index 00000000..718ed166
--- /dev/null
+++ b/tests/manual/gifs/data/qtquickcontrols2-combobox.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.1
+import QtQuick.Window 2.0
+
+Window {
+ width: 140
+ height: 180
+ visible: true
+
+ property alias comboBox: comboBox
+
+ ComboBox {
+ id: comboBox
+ model: ["First", "Second", "Third"]
+ y: 10
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+}
diff --git a/tests/manual/gifs/data/qtquickcontrols2-stackview-pop.qml b/tests/manual/gifs/data/qtquickcontrols2-stackview-pop.qml
new file mode 100644
index 00000000..2b4d3ee3
--- /dev/null
+++ b/tests/manual/gifs/data/qtquickcontrols2-stackview-pop.qml
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Window 2.0
+import QtQuick.Controls 2.0
+
+ApplicationWindow {
+ width: 160
+ height: 160
+ visible: true
+ color: "#eeeeee"
+
+ property int maxDepth: 3
+
+ function itemText(index) {
+ return String.fromCharCode(65 + index);
+ }
+
+ Component {
+ id: labelComponent
+
+ Label {
+ font.pixelSize: 60
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+
+ Component.onCompleted: {
+ for (var i = 0; i < maxDepth; ++i) {
+ stackView.push(labelComponent, { text: itemText(i) }, StackView.Immediate);
+ }
+ }
+ }
+
+ Label {
+ id: operationLabel
+ text: "pop()"
+ font.pixelSize: 16
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.margins: 10
+ }
+
+ Timer {
+ id: operationTimer
+ running: true
+ interval: 1500
+ onTriggered: {
+ stackView.pop();
+ hideOperationTimer.start();
+ }
+ }
+
+ Timer {
+ id: hideOperationTimer
+ interval: operationTimer.interval
+ onTriggered: operationLabel.visible = false
+ }
+}
diff --git a/tests/manual/gifs/data/qtquickcontrols2-stackview-push.qml b/tests/manual/gifs/data/qtquickcontrols2-stackview-push.qml
new file mode 100644
index 00000000..dd318f1d
--- /dev/null
+++ b/tests/manual/gifs/data/qtquickcontrols2-stackview-push.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Window 2.0
+import QtQuick.Controls 2.0
+
+ApplicationWindow {
+ width: 160
+ height: 160
+ visible: true
+ color: "#eeeeee"
+
+ property int itemIndex: 0
+ property int maxDepth: 3
+
+ function itemText(index) {
+ return String.fromCharCode(65 + index);
+ }
+
+ Component {
+ id: labelComponent
+
+ Label {
+ font.pixelSize: 60
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+ }
+
+ Label {
+ id: operationLabel
+ text: "push(" + itemText(Math.max(0, Math.min(maxDepth - 1, itemIndex - 1))) + ")"
+ font.pixelSize: 16
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.margins: 10
+ }
+
+ Timer {
+ id: operationTimer
+ running: true
+ interval: 1500
+ repeat: stackView.depth < maxDepth - 1
+ onRepeatChanged: if (!repeat) hideOperationTimer.start()
+
+ onTriggered: stackView.push(labelComponent, { text: itemText(itemIndex++) })
+ }
+
+ Timer {
+ id: hideOperationTimer
+ interval: operationTimer.interval * 2
+ onTriggered: operationLabel.visible = false
+ }
+}
diff --git a/tests/manual/gifs/data/qtquickcontrols2-stackview-replace.qml b/tests/manual/gifs/data/qtquickcontrols2-stackview-replace.qml
new file mode 100644
index 00000000..2586a81b
--- /dev/null
+++ b/tests/manual/gifs/data/qtquickcontrols2-stackview-replace.qml
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Window 2.0
+import QtQuick.Controls 2.0
+
+ApplicationWindow {
+ width: 160
+ height: 160
+ visible: true
+ color: "#eeeeee"
+
+ property int maxDepth: 3
+
+ function itemText(index) {
+ return String.fromCharCode(65 + index);
+ }
+
+ Component {
+ id: labelComponent
+
+ Label {
+ font.pixelSize: 60
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+
+ Component.onCompleted: {
+ for (var i = 0; i < maxDepth; ++i) {
+ stackView.push(labelComponent, { text: itemText(i) }, StackView.Immediate);
+ }
+ }
+ }
+
+ Label {
+ id: operationLabel
+ text: "replace(D)"
+ font.pixelSize: 16
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.margins: 10
+ }
+
+ Timer {
+ id: operationTimer
+ running: true
+ interval: 1500
+ onTriggered: {
+ stackView.replace(labelComponent, { text: "D" });
+ hideOperationTimer.start();
+ }
+ }
+
+ Timer {
+ id: hideOperationTimer
+ interval: operationTimer.interval
+ onTriggered: operationLabel.visible = false
+ }
+}
diff --git a/tests/manual/gifs/data/qtquickcontrols2-stackview-unwind.qml b/tests/manual/gifs/data/qtquickcontrols2-stackview-unwind.qml
new file mode 100644
index 00000000..6fb6b2a8
--- /dev/null
+++ b/tests/manual/gifs/data/qtquickcontrols2-stackview-unwind.qml
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Window 2.0
+import QtQuick.Controls 2.0
+
+ApplicationWindow {
+ width: 160
+ height: 160
+ visible: true
+ color: "#eeeeee"
+
+ property int maxDepth: 3
+
+ function itemText(index) {
+ return String.fromCharCode(65 + index);
+ }
+
+ Component {
+ id: labelComponent
+
+ Label {
+ font.pixelSize: 60
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+
+ Component.onCompleted: {
+ for (var i = 0; i < maxDepth; ++i) {
+ stackView.push(labelComponent, { text: itemText(i) }, StackView.Immediate);
+ }
+ }
+ }
+
+ Label {
+ id: operationLabel
+ text: "pop(null)"
+ font.pixelSize: 16
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.margins: 10
+ }
+
+ Timer {
+ id: operationTimer
+ running: true
+ interval: 1500
+ onTriggered: {
+ stackView.pop(null);
+ hideOperationTimer.start();
+ }
+ }
+
+ Timer {
+ id: hideOperationTimer
+ interval: operationTimer.interval
+ onTriggered: operationLabel.visible = false
+ }
+}
diff --git a/tests/manual/gifs/tst_gifs.cpp b/tests/manual/gifs/tst_gifs.cpp
index 9de401cb..5e6de547 100644
--- a/tests/manual/gifs/tst_gifs.cpp
+++ b/tests/manual/gifs/tst_gifs.cpp
@@ -75,6 +75,9 @@ private slots:
void triState();
void checkables_data();
void checkables();
+ void comboBox();
+ void stackView_data();
+ void stackView();
private:
void moveSmoothly(QQuickWindow *window, const QPoint &from, const QPoint &to, int movements,
@@ -710,6 +713,49 @@ void tst_Gifs::checkables()
gifRecorder.waitForFinish();
}
+void tst_Gifs::comboBox()
+{
+ GifRecorder gifRecorder;
+ gifRecorder.setDataDirPath(dataDirPath);
+ gifRecorder.setOutputDir(outputDir);
+ gifRecorder.setRecordingDuration(6);
+ gifRecorder.setQmlFileName(QStringLiteral("qtquickcontrols2-combobox.qml"));
+
+ gifRecorder.start();
+
+ QQuickWindow *window = gifRecorder.window();
+ QQuickItem *comboBox = window->property("comboBox").value<QQuickItem*>();
+ QVERIFY(comboBox);
+
+ // Open the popup.
+ const QPoint center = comboBox->mapToScene(
+ QPoint(comboBox->width() / 2, comboBox->height() / 2)).toPoint();
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, center, 800);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, center, 80);
+
+ // Select the third item.
+ QObject *popup = comboBox->property("popup").value<QObject*>();
+ QVERIFY(popup);
+ QQuickItem *popupContent = popup->property("contentItem").value<QQuickItem*>();
+ QVERIFY(popupContent);
+ const QPoint lastItemPos = popupContent->mapToScene(
+ QPoint(popupContent->width() / 2, popupContent->height() * 0.8)).toPoint();
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, lastItemPos, 600);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, lastItemPos, 200);
+
+ // Open the popup.
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, center, 1500);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, center, 80);
+
+ // Select the first item.
+ const QPoint firstItemPos = popupContent->mapToScene(
+ QPoint(popupContent->width() / 2, popupContent->height() * 0.2)).toPoint();
+ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, firstItemPos, 600);
+ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, firstItemPos, 200);
+
+ gifRecorder.waitForFinish();
+}
+
void tst_Gifs::triState_data()
{
QTest::addColumn<QString>("name");
@@ -841,6 +887,33 @@ void tst_Gifs::progressBar()
gifRecorder.waitForFinish();
}
+void tst_Gifs::stackView_data()
+{
+ QTest::addColumn<QString>("name");
+ QTest::addColumn<int>("duration");
+
+ QTest::newRow("push") << "push" << 8;
+ QTest::newRow("pop") << "pop" << 6;
+ QTest::newRow("unwind") << "unwind" << 6;
+ QTest::newRow("replace") << "replace" << 6;
+}
+
+void tst_Gifs::stackView()
+{
+ QFETCH(QString, name);
+ QFETCH(int, duration);
+
+ GifRecorder gifRecorder;
+ gifRecorder.setDataDirPath(dataDirPath);
+ gifRecorder.setOutputDir(outputDir);
+ gifRecorder.setRecordingDuration(duration);
+ gifRecorder.setHighQuality(true);
+ gifRecorder.setQmlFileName(QString::fromLatin1("qtquickcontrols2-stackview-%1.qml").arg(name));
+
+ gifRecorder.start();
+ gifRecorder.waitForFinish();
+}
+
QTEST_MAIN(tst_Gifs)
#include "tst_gifs.moc"