diff options
author | Albert Astals Cid <albert.astals@canonical.com> | 2014-04-15 15:27:29 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-18 07:39:32 +0200 |
commit | 5772da7e911832e71634322345948b0c98d397bf (patch) | |
tree | 8526b8b4a782d3f1ff09b2aca783bd11d8bf1682 | |
parent | dc051f28b865e54d3834824ffea6f2562f0836c1 (diff) |
QQuickItemView/QQuickPathView: Fix creation of delegates
When the delegate is set before the model and
after the ItemView/PathView has been created
Task-number: QTBUG-38368
Change-Id: I6963abe28087699cf4e8921153dc7641bae3b220
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/qquickpathview.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qmltest/listview/tst_listview.qml | 23 | ||||
-rw-r--r-- | tests/auto/qmltest/pathview/tst_pathview.qml | 35 |
4 files changed, 62 insertions, 0 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 46eec643fd..b4f6c34c6a 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -364,6 +364,8 @@ void QQuickItemView::setDelegate(QQmlComponent *delegate) if (!d->ownModel) { d->model = new QQmlDelegateModel(qmlContext(this)); d->ownModel = true; + if (isComponentComplete()) + static_cast<QQmlDelegateModel *>(d->model.data())->componentComplete(); } if (QQmlDelegateModel *dataModel = qobject_cast<QQmlDelegateModel*>(d->model)) { int oldCount = dataModel->count(); diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp index ec789670ab..45cd8e184c 100644 --- a/src/quick/items/qquickpathview.cpp +++ b/src/quick/items/qquickpathview.cpp @@ -1242,6 +1242,8 @@ void QQuickPathView::setDelegate(QQmlComponent *delegate) if (!d->ownModel) { d->model = new QQmlDelegateModel(qmlContext(this)); d->ownModel = true; + if (isComponentComplete()) + static_cast<QQmlDelegateModel *>(d->model.data())->componentComplete(); } if (QQmlDelegateModel *dataModel = qobject_cast<QQmlDelegateModel*>(d->model)) { int oldCount = dataModel->count(); diff --git a/tests/auto/qmltest/listview/tst_listview.qml b/tests/auto/qmltest/listview/tst_listview.qml index 0589e7c46b..03be57909f 100644 --- a/tests/auto/qmltest/listview/tst_listview.qml +++ b/tests/auto/qmltest/listview/tst_listview.qml @@ -102,6 +102,23 @@ Item { } } + ListView { + id: listViewDelegateModelAfterCreate + anchors.fill: parent + property int createdDelegates: 0 + } + + Component { + id: delegateModelAfterCreateComponent + Rectangle { + width: 140 + height: 140 + border.color: "black" + color: "red" + Component.onCompleted: listViewDelegateModelAfterCreate.createdDelegates++; + } + } + ListModel { id: emptymodel } ListModel { id: manyitems } ListModel { id: firstmodel; ListElement { name: "FirstModelElement0" } } @@ -249,5 +266,11 @@ Item { asyncListViewLoaderView.currentIndex = 4; } } + + function test_set_delegate_model_after_list_creation() { + listViewDelegateModelAfterCreate.delegate = delegateModelAfterCreateComponent; + listViewDelegateModelAfterCreate.model = 40; + verify(listViewDelegateModelAfterCreate.createdDelegates > 0); + } } } diff --git a/tests/auto/qmltest/pathview/tst_pathview.qml b/tests/auto/qmltest/pathview/tst_pathview.qml new file mode 100644 index 0000000000..820034c960 --- /dev/null +++ b/tests/auto/qmltest/pathview/tst_pathview.qml @@ -0,0 +1,35 @@ +import QtQuick 2.1 +import QtTest 1.0 + +Item { + id: top + + PathView { + id: pathViewDelegateModelAfterCreate + anchors.fill: parent + property int createdDelegates: 0 + path: Path { startX: 120; startY: 100 } + } + + Component { + id: delegateModelAfterCreateComponent + Rectangle { + width: 140 + height: 140 + border.color: "black" + color: "red" + Component.onCompleted: pathViewDelegateModelAfterCreate.createdDelegates++; + } + } + + TestCase { + name: "PathView" + when: windowShown + + function test_set_delegate_model_after_path_creation() { + pathViewDelegateModelAfterCreate.delegate = delegateModelAfterCreateComponent; + pathViewDelegateModelAfterCreate.model = 40; + verify(pathViewDelegateModelAfterCreate.createdDelegates > 0); + } + } +} |