aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanthosh Kumar <santhosh.kumar.selvaraj@qt.io>2023-10-17 10:12:21 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-02-09 14:16:43 +0000
commit41d9d86f6edf87698e18829ab229e311b85e4976 (patch)
tree8a4188331c1d04463d1f943f5993073a4c054645
parent1faaefe3bf59ca609e3729c183b6b5f3fab937fe (diff)
Set default layout size policies for quick items
The quick items are initiliazed with default layout size policy. This size policy can be either Preferred or Fixed and it can vary depending on controls and its orientation. [ChangeLog][QtQuick][Item Behavior Changes] The QtQuick items now set their default size policy and it would be effective when used within QtQuick Layouts. The following types now behave differently by default when used in layouts: Button, CheckBox, ComboBox, Dial, DialogButtonBox, Frame, Flickable, GridView, GroupBox, HorizontalHeaderView, ListView, Page, Pane, PathView, ProgressBar, RadioButton, RangeSlider, RoundButton, ScrollBar, ScrollIndicator, ScrollView, Slider, SpinBox, SplitView, StackView, SwipeView, Switch, TabBar, TabButton, TableView, TextArea, TextEdit, TextField, TextInput, ToolButton, TreeView, Tumbler, VerticalHeaderView. Task-number: QTBUG-117597 Change-Id: I41fe73a2e466e396f26604a14d1f15b8b42df338 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io> (cherry picked from commit 2451ff25a531a2427825726f4b5f015fb01d2663) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/quick/items/qquickflickable.cpp1
-rw-r--r--src/quick/items/qquickitem.cpp12
-rw-r--r--src/quick/items/qquickitem_p.h6
-rw-r--r--src/quick/items/qquickpathview.cpp1
-rw-r--r--src/quick/items/qquicktextedit.cpp1
-rw-r--r--src/quick/items/qquicktextinput.cpp1
-rw-r--r--src/quicktemplates/qquickabstractbutton.cpp49
-rw-r--r--src/quicktemplates/qquickabstractbutton_p_p.h1
-rw-r--r--src/quicktemplates/qquickcombobox.cpp1
-rw-r--r--src/quicktemplates/qquickcontainer.cpp1
-rw-r--r--src/quicktemplates/qquickdial.cpp2
-rw-r--r--src/quicktemplates/qquickdialogbuttonbox.cpp1
-rw-r--r--src/quicktemplates/qquickheaderview.cpp2
-rw-r--r--src/quicktemplates/qquickpane.cpp1
-rw-r--r--src/quicktemplates/qquickprogressbar.cpp2
-rw-r--r--src/quicktemplates/qquickrangeslider.cpp6
-rw-r--r--src/quicktemplates/qquickscrollbar.cpp6
-rw-r--r--src/quicktemplates/qquickscrollindicator.cpp7
-rw-r--r--src/quicktemplates/qquickslider.cpp7
-rw-r--r--src/quicktemplates/qquickspinbox.cpp1
-rw-r--r--src/quicktemplates/qquickstackview.cpp3
-rw-r--r--src/quicktemplates/qquicktumbler.cpp3
22 files changed, 89 insertions, 26 deletions
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp
index 367734bfa7..3082f5d3f4 100644
--- a/src/quick/items/qquickflickable.cpp
+++ b/src/quick/items/qquickflickable.cpp
@@ -265,6 +265,7 @@ void QQuickFlickablePrivate::init()
q->setFlag(QQuickItem::ItemIsViewport);
QQuickItemPrivate *viewportPrivate = QQuickItemPrivate::get(contentItem);
viewportPrivate->addItemChangeListener(this, QQuickItemPrivate::Geometry);
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
/*!
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index 7bfe3d1718..6a6a4ca4ad 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -3277,6 +3277,7 @@ QQuickItemPrivate::QQuickItemPrivate()
, baselineOffset(0)
, itemNodeInstance(nullptr)
, paintNode(nullptr)
+ , szPolicy(QLayoutPolicy::Fixed, QLayoutPolicy::Fixed)
{
}
@@ -3301,6 +3302,17 @@ void QQuickItemPrivate::init(QQuickItem *parent)
}
}
+QLayoutPolicy QQuickItemPrivate::sizePolicy() const
+{
+ return szPolicy;
+}
+
+void QQuickItemPrivate::setSizePolicy(const QLayoutPolicy::Policy& horizontalPolicy, const QLayoutPolicy::Policy& verticalPolicy)
+{
+ szPolicy.setHorizontalPolicy(horizontalPolicy);
+ szPolicy.setVerticalPolicy(verticalPolicy);
+}
+
void QQuickItemPrivate::data_append(QQmlListProperty<QObject> *prop, QObject *o)
{
if (!o)
diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h
index 1771d18391..c774bc3b21 100644
--- a/src/quick/items/qquickitem_p.h
+++ b/src/quick/items/qquickitem_p.h
@@ -44,6 +44,8 @@
#include <QtCore/qelapsedtimer.h>
#include <QtCore/qpointer.h>
+#include <QtGui/private/qlayoutpolicy_p.h>
+
QT_BEGIN_NAMESPACE
class QNetworkReply;
@@ -708,6 +710,10 @@ public:
virtual void updatePolish() { }
virtual void dumpItemTree(int indent) const;
+
+ QLayoutPolicy sizePolicy() const;
+ void setSizePolicy(const QLayoutPolicy::Policy &horizontalPolicy, const QLayoutPolicy::Policy &verticalPolicy);
+ QLayoutPolicy szPolicy;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickItemPrivate::ExtraDataTags)
diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp
index 88e45d77b9..598e2b08cf 100644
--- a/src/quick/items/qquickpathview.cpp
+++ b/src/quick/items/qquickpathview.cpp
@@ -76,6 +76,7 @@ QQuickPathViewPrivate::QQuickPathViewPrivate()
, highlightRangeMode(QQuickPathView::StrictlyEnforceRange)
, highlightMoveDuration(300), modelCount(0), snapMode(QQuickPathView::NoSnap)
{
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
void QQuickPathViewPrivate::init()
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index f5f85a771c..f4690c1f88 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -2704,6 +2704,7 @@ void QQuickTextEditPrivate::init()
#if QT_CONFIG(cursor)
updateMouseCursorShape();
#endif
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
void QQuickTextEditPrivate::resetInputMethod()
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index 363fa1cbd3..e48e529963 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -2867,6 +2867,7 @@ void QQuickTextInputPrivate::init()
}
m_inputControl = new QInputControl(QInputControl::LineEdit, q);
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
}
void QQuickTextInputPrivate::cancelInput()
diff --git a/src/quicktemplates/qquickabstractbutton.cpp b/src/quicktemplates/qquickabstractbutton.cpp
index b173269268..0c1af73e55 100644
--- a/src/quicktemplates/qquickabstractbutton.cpp
+++ b/src/quicktemplates/qquickabstractbutton.cpp
@@ -87,6 +87,25 @@ QT_BEGIN_NAMESPACE
This signal is emitted when the button is interactively double clicked by the user via touch or mouse.
*/
+void QQuickAbstractButtonPrivate::init()
+{
+ Q_Q(QQuickAbstractButton);
+ q->setActiveFocusOnTab(true);
+#ifdef Q_OS_MACOS
+ q->setFocusPolicy(Qt::TabFocus);
+#else
+ q->setFocusPolicy(Qt::StrongFocus);
+#endif
+ q->setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(quicktemplates2_multitouch)
+ q->setAcceptTouchEvents(true);
+#endif
+#if QT_CONFIG(cursor)
+ q->setCursor(Qt::ArrowCursor);
+#endif
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
+}
+
QPointF QQuickAbstractButtonPrivate::centerPressPoint() const
{
return QPointF(qRound(width / 2), qRound(height / 2));
@@ -463,37 +482,15 @@ QList<QQuickAbstractButton *> QQuickAbstractButtonPrivate::findExclusiveButtons(
QQuickAbstractButton::QQuickAbstractButton(QQuickItem *parent)
: QQuickControl(*(new QQuickAbstractButtonPrivate), parent)
{
- setActiveFocusOnTab(true);
-#ifdef Q_OS_MACOS
- setFocusPolicy(Qt::TabFocus);
-#else
- setFocusPolicy(Qt::StrongFocus);
-#endif
- setAcceptedMouseButtons(Qt::LeftButton);
-#if QT_CONFIG(quicktemplates2_multitouch)
- setAcceptTouchEvents(true);
-#endif
-#if QT_CONFIG(cursor)
- setCursor(Qt::ArrowCursor);
-#endif
+ Q_D(QQuickAbstractButton);
+ d->init();
}
QQuickAbstractButton::QQuickAbstractButton(QQuickAbstractButtonPrivate &dd, QQuickItem *parent)
: QQuickControl(dd, parent)
{
- setActiveFocusOnTab(true);
-#ifdef Q_OS_MACOS
- setFocusPolicy(Qt::TabFocus);
-#else
- setFocusPolicy(Qt::StrongFocus);
-#endif
- setAcceptedMouseButtons(Qt::LeftButton);
-#if QT_CONFIG(quicktemplates2_multitouch)
- setAcceptTouchEvents(true);
-#endif
-#if QT_CONFIG(cursor)
- setCursor(Qt::ArrowCursor);
-#endif
+ Q_D(QQuickAbstractButton);
+ d->init();
}
QQuickAbstractButton::~QQuickAbstractButton()
diff --git a/src/quicktemplates/qquickabstractbutton_p_p.h b/src/quicktemplates/qquickabstractbutton_p_p.h
index e03b28fe82..52b42af67f 100644
--- a/src/quicktemplates/qquickabstractbutton_p_p.h
+++ b/src/quicktemplates/qquickabstractbutton_p_p.h
@@ -68,6 +68,7 @@ public:
void actionTextChange();
void setText(const QString &text, bool isExplicit);
+ void init();
void updateEffectiveIcon();
diff --git a/src/quicktemplates/qquickcombobox.cpp b/src/quicktemplates/qquickcombobox.cpp
index 6e08019000..c55e988b74 100644
--- a/src/quicktemplates/qquickcombobox.cpp
+++ b/src/quicktemplates/qquickcombobox.cpp
@@ -954,6 +954,7 @@ QQuickComboBox::QQuickComboBox(QQuickItem *parent)
#endif
Q_D(QQuickComboBox);
d->setInputMethodHints(Qt::ImhNoPredictiveText, true);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
}
QQuickComboBox::~QQuickComboBox()
diff --git a/src/quicktemplates/qquickcontainer.cpp b/src/quicktemplates/qquickcontainer.cpp
index b696b1812c..115168083c 100644
--- a/src/quicktemplates/qquickcontainer.cpp
+++ b/src/quicktemplates/qquickcontainer.cpp
@@ -167,6 +167,7 @@ void QQuickContainerPrivate::init()
QObject::connect(contentModel, &QQmlObjectModel::childrenChanged, q, &QQuickContainer::contentChildrenChanged);
connect(q, &QQuickControl::implicitContentWidthChanged, this, &QQuickContainerPrivate::updateContentWidth);
connect(q, &QQuickControl::implicitContentHeightChanged, this, &QQuickContainerPrivate::updateContentHeight);
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
void QQuickContainerPrivate::cleanup()
diff --git a/src/quicktemplates/qquickdial.cpp b/src/quicktemplates/qquickdial.cpp
index feb17287e6..3f95bd901d 100644
--- a/src/quicktemplates/qquickdial.cpp
+++ b/src/quicktemplates/qquickdial.cpp
@@ -372,6 +372,8 @@ QQuickDial::QQuickDial(QQuickItem *parent)
#if QT_CONFIG(cursor)
setCursor(Qt::ArrowCursor);
#endif
+ Q_D(QQuickDial);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
/*!
diff --git a/src/quicktemplates/qquickdialogbuttonbox.cpp b/src/quicktemplates/qquickdialogbuttonbox.cpp
index 33c5d798fd..b7c486c472 100644
--- a/src/quicktemplates/qquickdialogbuttonbox.cpp
+++ b/src/quicktemplates/qquickdialogbuttonbox.cpp
@@ -455,6 +455,7 @@ QQuickDialogButtonBox::QQuickDialogButtonBox(QQuickItem *parent)
Q_D(QQuickDialogButtonBox);
d->changeTypes |= QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight;
d->buttonLayout = platformButtonLayout();
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
}
QQuickDialogButtonBox::~QQuickDialogButtonBox()
diff --git a/src/quicktemplates/qquickheaderview.cpp b/src/quicktemplates/qquickheaderview.cpp
index ef5607c67a..b8763e29a0 100644
--- a/src/quicktemplates/qquickheaderview.cpp
+++ b/src/quicktemplates/qquickheaderview.cpp
@@ -176,6 +176,8 @@ QAbstractItemModel *QQuickHeaderViewBasePrivate::selectionSourceModel()
QQuickHeaderViewBase::QQuickHeaderViewBase(Qt::Orientation orient, QQuickItem *parent)
: QQuickTableView(*(new QQuickHeaderViewBasePrivate), parent)
{
+ d_func()->setSizePolicy(orient == Qt::Horizontal ? QLayoutPolicy::Preferred : QLayoutPolicy::Fixed,
+ orient == Qt::Horizontal ? QLayoutPolicy::Fixed : QLayoutPolicy::Preferred);
d_func()->setOrientation(orient);
setSyncDirection(orient);
}
diff --git a/src/quicktemplates/qquickpane.cpp b/src/quicktemplates/qquickpane.cpp
index 968b633550..02f32e720e 100644
--- a/src/quicktemplates/qquickpane.cpp
+++ b/src/quicktemplates/qquickpane.cpp
@@ -108,6 +108,7 @@ void QQuickPanePrivate::init()
#endif
connect(q, &QQuickControl::implicitContentWidthChanged, this, &QQuickPanePrivate::updateContentWidth);
connect(q, &QQuickControl::implicitContentHeightChanged, this, &QQuickPanePrivate::updateContentHeight);
+ setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
QList<QQuickItem *> QQuickPanePrivate::contentChildItems() const
diff --git a/src/quicktemplates/qquickprogressbar.cpp b/src/quicktemplates/qquickprogressbar.cpp
index c42a62b4fe..77be68873c 100644
--- a/src/quicktemplates/qquickprogressbar.cpp
+++ b/src/quicktemplates/qquickprogressbar.cpp
@@ -65,6 +65,8 @@ public:
QQuickProgressBar::QQuickProgressBar(QQuickItem *parent)
: QQuickControl(*(new QQuickProgressBarPrivate), parent)
{
+ Q_D(QQuickProgressBar);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
}
/*!
diff --git a/src/quicktemplates/qquickrangeslider.cpp b/src/quicktemplates/qquickrangeslider.cpp
index 80618ff501..d97dfdff90 100644
--- a/src/quicktemplates/qquickrangeslider.cpp
+++ b/src/quicktemplates/qquickrangeslider.cpp
@@ -618,6 +618,7 @@ QQuickRangeSlider::QQuickRangeSlider(QQuickItem *parent)
Q_D(QQuickRangeSlider);
d->first = new QQuickRangeSliderNode(0.0, this);
d->second = new QQuickRangeSliderNode(1.0, this);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
setFlag(QQuickItem::ItemIsFocusScope);
#ifdef Q_OS_MACOS
@@ -979,6 +980,11 @@ void QQuickRangeSlider::setOrientation(Qt::Orientation orientation)
if (d->orientation == orientation)
return;
+ if (orientation == Qt::Horizontal)
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
+ else
+ d->setSizePolicy(QLayoutPolicy::Fixed, QLayoutPolicy::Preferred);
+
d->orientation = orientation;
emit orientationChanged();
}
diff --git a/src/quicktemplates/qquickscrollbar.cpp b/src/quicktemplates/qquickscrollbar.cpp
index cec3df0b75..75de0363e9 100644
--- a/src/quicktemplates/qquickscrollbar.cpp
+++ b/src/quicktemplates/qquickscrollbar.cpp
@@ -368,6 +368,7 @@ QQuickScrollBar::QQuickScrollBar(QQuickItem *parent)
Q_D(QQuickScrollBar);
d->decreaseVisual = new QQuickIndicatorButton(this);
d->increaseVisual = new QQuickIndicatorButton(this);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
setKeepMouseGrab(true);
setAcceptedMouseButtons(Qt::LeftButton);
#if QT_CONFIG(quicktemplates2_multitouch)
@@ -572,6 +573,11 @@ void QQuickScrollBar::setOrientation(Qt::Orientation orientation)
if (d->orientation == orientation)
return;
+ if (orientation == Qt::Horizontal)
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
+ else
+ d->setSizePolicy(QLayoutPolicy::Fixed, QLayoutPolicy::Preferred);
+
d->orientation = orientation;
if (isComponentComplete())
d->resizeContent();
diff --git a/src/quicktemplates/qquickscrollindicator.cpp b/src/quicktemplates/qquickscrollindicator.cpp
index 9cd4810ad1..9928503e86 100644
--- a/src/quicktemplates/qquickscrollindicator.cpp
+++ b/src/quicktemplates/qquickscrollindicator.cpp
@@ -168,6 +168,8 @@ void QQuickScrollIndicatorPrivate::resizeContent()
QQuickScrollIndicator::QQuickScrollIndicator(QQuickItem *parent)
: QQuickControl(*(new QQuickScrollIndicatorPrivate), parent)
{
+ Q_D(QQuickScrollIndicator);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
}
QQuickScrollIndicatorAttached *QQuickScrollIndicator::qmlAttachedProperties(QObject *object)
@@ -295,6 +297,11 @@ void QQuickScrollIndicator::setOrientation(Qt::Orientation orientation)
if (d->orientation == orientation)
return;
+ if (orientation == Qt::Horizontal)
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
+ else
+ d->setSizePolicy(QLayoutPolicy::Fixed, QLayoutPolicy::Preferred);
+
d->orientation = orientation;
if (isComponentComplete())
d->resizeContent();
diff --git a/src/quicktemplates/qquickslider.cpp b/src/quicktemplates/qquickslider.cpp
index 2989735392..04b5589524 100644
--- a/src/quicktemplates/qquickslider.cpp
+++ b/src/quicktemplates/qquickslider.cpp
@@ -250,6 +250,8 @@ void QQuickSliderPrivate::itemDestroyed(QQuickItem *item)
QQuickSlider::QQuickSlider(QQuickItem *parent)
: QQuickControl(*(new QQuickSliderPrivate), parent)
{
+ Q_D(QQuickSlider);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
setActiveFocusOnTab(true);
#ifdef Q_OS_MACOS
setFocusPolicy(Qt::TabFocus);
@@ -533,6 +535,11 @@ void QQuickSlider::setOrientation(Qt::Orientation orientation)
if (d->orientation == orientation)
return;
+ if (orientation == Qt::Horizontal)
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
+ else
+ d->setSizePolicy(QLayoutPolicy::Fixed, QLayoutPolicy::Preferred);
+
d->orientation = orientation;
emit orientationChanged();
}
diff --git a/src/quicktemplates/qquickspinbox.cpp b/src/quicktemplates/qquickspinbox.cpp
index 2f40bd1292..a76a06076c 100644
--- a/src/quicktemplates/qquickspinbox.cpp
+++ b/src/quicktemplates/qquickspinbox.cpp
@@ -470,6 +470,7 @@ QQuickSpinBox::QQuickSpinBox(QQuickItem *parent)
Q_D(QQuickSpinBox);
d->up = new QQuickIndicatorButton(this);
d->down = new QQuickIndicatorButton(this);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Fixed);
setFlag(ItemIsFocusScope);
setFiltersChildMouseEvents(true);
diff --git a/src/quicktemplates/qquickstackview.cpp b/src/quicktemplates/qquickstackview.cpp
index f13dd20c24..457423104e 100644
--- a/src/quicktemplates/qquickstackview.cpp
+++ b/src/quicktemplates/qquickstackview.cpp
@@ -384,6 +384,9 @@ QQuickStackView::QQuickStackView(QQuickItem *parent)
: QQuickControl(*(new QQuickStackViewPrivate), parent)
{
setFlag(ItemIsFocusScope);
+
+ Q_D(QQuickStackView);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
}
QQuickStackView::~QQuickStackView()
diff --git a/src/quicktemplates/qquicktumbler.cpp b/src/quicktemplates/qquicktumbler.cpp
index e7f6606de3..71766cc698 100644
--- a/src/quicktemplates/qquicktumbler.cpp
+++ b/src/quicktemplates/qquicktumbler.cpp
@@ -259,6 +259,9 @@ QPalette QQuickTumblerPrivate::defaultPalette() const
QQuickTumbler::QQuickTumbler(QQuickItem *parent)
: QQuickControl(*(new QQuickTumblerPrivate), parent)
{
+ Q_D(QQuickTumbler);
+ d->setSizePolicy(QLayoutPolicy::Preferred, QLayoutPolicy::Preferred);
+
setActiveFocusOnTab(true);
connect(this, SIGNAL(leftPaddingChanged()), this, SLOT(_q_updateItemWidths()));