aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2025-12-15 16:14:22 +0200
committerTarja Sundqvist <tarja.sundqvist@qt.io>2025-12-15 16:14:22 +0200
commitb58ec3b086518da5aa573f99426235854c23e35f (patch)
tree861a9935d8f1cdba2fdca546836a351736dbddbf /src/quickcontrols
parent4826f86e274f1b29bd769e6790824f9e62a40f62 (diff)
parent22032227d16c39211e2ebceef97d21f4d89c7c87 (diff)
Merge tag 'v6.5.8-lts-lgpl' into 6.56.5
Qt 6.5.8-lts-lgpl release
Diffstat (limited to 'src/quickcontrols')
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp12
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h1
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml2
-rw-r--r--src/quickcontrols/doc/src/includes/customize-button-background.qdocinc2
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc4
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp12
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h1
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp14
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h1
9 files changed, 38 insertions, 11 deletions
diff --git a/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp b/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp
index d6cceb2a56..f885c35c59 100644
--- a/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp
+++ b/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp
@@ -145,8 +145,11 @@ bool QQuickBasicBusyIndicator::isRunning() const
void QQuickBasicBusyIndicator::setRunning(bool running)
{
- if (running)
+ m_running = running;
+
+ if (m_running)
setVisible(true);
+ // Don't set visible to false if not running, because we use an opacity animation (in QML) to hide ourselves.
}
int QQuickBasicBusyIndicator::elapsed() const
@@ -159,7 +162,12 @@ void QQuickBasicBusyIndicator::itemChange(QQuickItem::ItemChange change, const Q
QQuickItem::itemChange(change, data);
switch (change) {
case ItemOpacityHasChanged:
- if (qFuzzyIsNull(data.realValue))
+ // If running is set to false and then true within a short period (QTBUG-85860), our
+ // OpacityAnimator cancels the 1 => 0 animation (which was for running being set to false),
+ // setting opacity to 0 and hence visible to false. This happens _after_ setRunning(true)
+ // was called, because the properties were set synchronously but the animation is
+ // asynchronous. To account for this situation, we only hide ourselves if we're not running.
+ if (qFuzzyIsNull(data.realValue) && !m_running)
setVisible(false);
break;
case ItemVisibleHasChanged:
diff --git a/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h b/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h
index a39b61cde4..42df13243f 100644
--- a/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h
+++ b/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h
@@ -49,6 +49,7 @@ protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
private:
+ bool m_running = false;
int m_elapsed = 0;
QColor m_pen;
QColor m_fill;
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml
index 960600eec8..d4d5d04f5a 100644
--- a/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols-combobox-custom.qml
@@ -69,7 +69,7 @@ ComboBox {
popup: Popup {
y: control.height - 1
width: control.width
- implicitHeight: contentItem.implicitHeight
+ height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
padding: 1
contentItem: ListView {
diff --git a/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc b/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc
index 0acad02d38..e8c88058b6 100644
--- a/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc
+++ b/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc
@@ -1,7 +1,7 @@
//! [file]
\qml
import QtQuick
-import QtQuick.Controls
+import QtQuick.Controls.Basic
ApplicationWindow {
width: 400
diff --git a/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc b/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc
index 59a97baa0e..3a06d670bf 100644
--- a/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc
+++ b/src/quickcontrols/doc/src/qtquickcontrols-customize.qdoc
@@ -52,7 +52,7 @@
your application, refer to it by its filename:
\qml
- import QtQuick.Controls
+ import QtQuick.Controls.Basic
ApplicationWindow {
MyButton {
@@ -68,7 +68,7 @@
control, first import the folder into a namespace:
\qml
- import QtQuick.Controls
+ import QtQuick.Controls.Basic
import "controls" as MyControls
ApplicationWindow {
diff --git a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp
index 8e58b09ed3..ddf26140ce 100644
--- a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp
+++ b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp
@@ -33,10 +33,13 @@ bool QQuickFusionBusyIndicator::isRunning() const
void QQuickFusionBusyIndicator::setRunning(bool running)
{
- if (running) {
+ m_running = running;
+
+ if (m_running) {
setVisible(true);
update();
}
+ // Don't set visible to false if not running, because we use an opacity animation (in QML) to hide ourselves.
}
void QQuickFusionBusyIndicator::paint(QPainter *painter)
@@ -73,7 +76,12 @@ void QQuickFusionBusyIndicator::itemChange(ItemChange change, const ItemChangeDa
switch (change) {
case ItemOpacityHasChanged:
- if (qFuzzyIsNull(data.realValue))
+ // If running is set to false and then true within a short period (QTBUG-85860), our
+ // OpacityAnimator cancels the 1 => 0 animation (which was for running being set to false),
+ // setting opacity to 0 and hence visible to false. This happens _after_ setRunning(true)
+ // was called, because the properties were set synchronously but the animation is
+ // asynchronous. To account for this situation, we only hide ourselves if we're not running.
+ if (qFuzzyIsNull(data.realValue) && !m_running)
setVisible(false);
break;
case ItemVisibleHasChanged:
diff --git a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h
index 22ff2af788..8581042539 100644
--- a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h
+++ b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h
@@ -44,6 +44,7 @@ protected:
void itemChange(ItemChange change, const ItemChangeData &data) override;
private:
+ bool m_running = false;
QColor m_color;
};
diff --git a/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp b/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp
index 4d5b4e13e7..d99140b113 100644
--- a/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp
+++ b/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp
@@ -162,13 +162,16 @@ void QQuickMaterialBusyIndicator::setColor(const QColor &color)
bool QQuickMaterialBusyIndicator::isRunning() const
{
- return isVisible();
+ return m_running;
}
void QQuickMaterialBusyIndicator::setRunning(bool running)
{
- if (running)
+ m_running = running;
+
+ if (m_running)
setVisible(true);
+ // Don't set visible to false if not running, because we use an opacity animation (in QML) to hide ourselves.
}
int QQuickMaterialBusyIndicator::elapsed() const
@@ -181,7 +184,12 @@ void QQuickMaterialBusyIndicator::itemChange(QQuickItem::ItemChange change, cons
QQuickItem::itemChange(change, data);
switch (change) {
case ItemOpacityHasChanged:
- if (qFuzzyIsNull(data.realValue))
+ // If running is set to false and then true within a short period (QTBUG-85860), our
+ // OpacityAnimator cancels the 1 => 0 animation (which was for running being set to false),
+ // setting opacity to 0 and hence visible to false. This happens _after_ setRunning(true)
+ // was called, because the properties were set synchronously but the animation is
+ // asynchronous. To account for this situation, we only hide ourselves if we're not running.
+ if (qFuzzyIsNull(data.realValue) && !m_running)
setVisible(false);
break;
case ItemVisibleHasChanged:
diff --git a/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h b/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h
index b6bbd925c7..ab70432d61 100644
--- a/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h
+++ b/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h
@@ -45,6 +45,7 @@ protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
private:
+ bool m_running = false;
int m_elapsed = 0;
QColor m_color = Qt::black;
};