diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickcontainer.cpp | 40 | ||||
-rw-r--r-- | src/quicktemplates2/qquickcontainer_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickcontainer_p_p.h | 1 |
3 files changed, 32 insertions, 11 deletions
diff --git a/src/quicktemplates2/qquickcontainer.cpp b/src/quicktemplates2/qquickcontainer.cpp index 919eff70..7cf73841 100644 --- a/src/quicktemplates2/qquickcontainer.cpp +++ b/src/quicktemplates2/qquickcontainer.cpp @@ -306,6 +306,24 @@ void QQuickContainerPrivate::removeItem(int index, QQuickItem *item) updatingCurrent = false; } +void QQuickContainerPrivate::reorderItems() +{ + Q_Q(QQuickContainer); + if (!contentItem) + return; + + QList<QQuickItem *> siblings = effectiveContentItem(contentItem)->childItems(); + + int to = 0; + for (int i = 0; i < siblings.count(); ++i) { + QQuickItem* sibling = siblings.at(i); + if (QQuickItemPrivate::get(sibling)->isTransparentForPositioner()) + continue; + int index = contentModel->indexOf(sibling, nullptr); + q->moveItem(index, to++); + } +} + void QQuickContainerPrivate::_q_currentIndexChanged() { Q_Q(QQuickContainer); @@ -329,18 +347,11 @@ void QQuickContainerPrivate::itemParentChanged(QQuickItem *item, QQuickItem *par void QQuickContainerPrivate::itemSiblingOrderChanged(QQuickItem *) { - // reorder the restacked items (eg. by a Repeater) - Q_Q(QQuickContainer); - QList<QQuickItem *> siblings = effectiveContentItem(contentItem)->childItems(); + if (!componentComplete) + return; - int to = 0; - for (int i = 0; i < siblings.count(); ++i) { - QQuickItem* sibling = siblings.at(i); - if (QQuickItemPrivate::get(sibling)->isTransparentForPositioner()) - continue; - int index = contentModel->indexOf(sibling, nullptr); - q->moveItem(index, to++); - } + // reorder the restacked items (eg. by a Repeater) + reorderItems(); } void QQuickContainerPrivate::itemDestroyed(QQuickItem *item) @@ -682,6 +693,13 @@ QQuickItem *QQuickContainer::currentItem() const return itemAt(d->currentIndex); } +void QQuickContainer::componentComplete() +{ + Q_D(QQuickContainer); + QQuickControl::componentComplete(); + d->reorderItems(); +} + void QQuickContainer::itemChange(ItemChange change, const ItemChangeData &data) { Q_D(QQuickContainer); diff --git a/src/quicktemplates2/qquickcontainer_p.h b/src/quicktemplates2/qquickcontainer_p.h index 6db45589..59f85b49 100644 --- a/src/quicktemplates2/qquickcontainer_p.h +++ b/src/quicktemplates2/qquickcontainer_p.h @@ -98,6 +98,8 @@ Q_SIGNALS: protected: QQuickContainer(QQuickContainerPrivate &dd, QQuickItem *parent); + void componentComplete() override; + void itemChange(ItemChange change, const ItemChangeData &data) override; void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) override; diff --git a/src/quicktemplates2/qquickcontainer_p_p.h b/src/quicktemplates2/qquickcontainer_p_p.h index 38c6b3e4..bc892c7d 100644 --- a/src/quicktemplates2/qquickcontainer_p_p.h +++ b/src/quicktemplates2/qquickcontainer_p_p.h @@ -68,6 +68,7 @@ public: void insertItem(int index, QQuickItem *item); void moveItem(int from, int to); void removeItem(int index, QQuickItem *item); + void reorderItems(); void _q_currentIndexChanged(); |