diff options
author | Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> | 2023-10-17 10:12:21 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-02-09 14:16:43 +0000 |
commit | 41d9d86f6edf87698e18829ab229e311b85e4976 (patch) | |
tree | 8a4188331c1d04463d1f943f5993073a4c054645 | |
parent | 1faaefe3bf59ca609e3729c183b6b5f3fab937fe (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>
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())); |