summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2016-10-12 12:08:26 +0200
committerJani Heikkinen <jani.heikkinen@qt.io>2016-10-14 10:01:26 +0000
commit0eac16fbda846c951f9b3887199e72b66f5aacd7 (patch)
tree31e5e7133326ed358a5d132fc1587dfc7b7ca4f8
parent2c147f2be69ada6aa896e7fb753c3c05fbf46730 (diff)
NodeInstantiator created nodes go to its parentv5.7.1
Currently, elements created by the NodeInstantiator are children of the instantiator itself. Change that to parent them in the instantiator parent instead. Rationale for that is that it will behave similarly to Repeater this way, and gives a chance of using NodeInstantiator in frame graphs. Indeed, anything which is not a FrameGraphNode gets pruned in that context that would include branches starting from NodeInstantiator. Change-Id: I651a51471d92fcf466c9abd5dbbbfa2960ef1247 Task-Id: QTBUG-55908 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/quick3d/quick3d/items/quick3dnodeinstantiator.cpp2
-rw-r--r--tests/auto/quick3d/quick3dnodeinstantiator/data/createMultiple.qml12
-rw-r--r--tests/auto/quick3d/quick3dnodeinstantiator/data/createNone.qml16
-rw-r--r--tests/auto/quick3d/quick3dnodeinstantiator/data/createSingle.qml10
-rw-r--r--tests/auto/quick3d/quick3dnodeinstantiator/data/inactive.qml12
-rw-r--r--tests/auto/quick3d/quick3dnodeinstantiator/data/stringModel.qml12
-rw-r--r--tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp34
7 files changed, 60 insertions, 38 deletions
diff --git a/src/quick3d/quick3d/items/quick3dnodeinstantiator.cpp b/src/quick3d/quick3d/items/quick3dnodeinstantiator.cpp
index b95290a3c..41daf0921 100644
--- a/src/quick3d/quick3d/items/quick3dnodeinstantiator.cpp
+++ b/src/quick3d/quick3d/items/quick3dnodeinstantiator.cpp
@@ -148,7 +148,7 @@ void Quick3DNodeInstantiatorPrivate::_q_createdItem(int idx, QObject *item)
Q_Q(Quick3DNodeInstantiator);
if (m_objects.contains(item)) //Case when it was created synchronously in regenerate
return;
- static_cast<QNode *>(item)->setParent(q);
+ static_cast<QNode *>(item)->setParent(q->parentNode());
m_objects.insert(idx, item);
if (m_objects.count() == 1)
q->objectChanged();
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/data/createMultiple.qml b/tests/auto/quick3d/quick3dnodeinstantiator/data/createMultiple.qml
index 67c1e4fe7..c1f3b21ed 100644
--- a/tests/auto/quick3d/quick3dnodeinstantiator/data/createMultiple.qml
+++ b/tests/auto/quick3d/quick3dnodeinstantiator/data/createMultiple.qml
@@ -1,10 +1,12 @@
import QtQml 2.1
import Qt3D.Core 2.0
-NodeInstantiator {
- model: 10
- delegate: Entity {
- property bool success: true
- property int idx: index
+Entity {
+ NodeInstantiator {
+ model: 10
+ delegate: Entity {
+ property bool success: true
+ property int idx: index
+ }
}
}
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/data/createNone.qml b/tests/auto/quick3d/quick3dnodeinstantiator/data/createNone.qml
index 736a02b45..eef31cb8c 100644
--- a/tests/auto/quick3d/quick3dnodeinstantiator/data/createNone.qml
+++ b/tests/auto/quick3d/quick3dnodeinstantiator/data/createNone.qml
@@ -1,13 +1,15 @@
import QtQml 2.1
import Qt3D.Core 2.0
-NodeInstantiator {
- model: 0
- property bool success: true
- Entity {
+Entity {
+ NodeInstantiator {
+ model: 0
property bool success: true
- property int idx: index
+ Entity {
+ property bool success: true
+ property int idx: index
+ }
+ onObjectChanged: success = false;//Don't create intermediate objects
+ onCountChanged: success = false;//Don't create intermediate objects
}
- onObjectChanged: success = false;//Don't create intermediate objects
- onCountChanged: success = false;//Don't create intermediate objects
}
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/data/createSingle.qml b/tests/auto/quick3d/quick3dnodeinstantiator/data/createSingle.qml
index 630da9940..5a79d6105 100644
--- a/tests/auto/quick3d/quick3dnodeinstantiator/data/createSingle.qml
+++ b/tests/auto/quick3d/quick3dnodeinstantiator/data/createSingle.qml
@@ -1,9 +1,11 @@
import QtQml 2.1
import Qt3D.Core 2.0
-NodeInstantiator {
- Entity {
- property bool success: true
- property int idx: index
+Entity {
+ NodeInstantiator {
+ Entity {
+ property bool success: true
+ property int idx: index
+ }
}
}
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/data/inactive.qml b/tests/auto/quick3d/quick3dnodeinstantiator/data/inactive.qml
index 178229059..8ae6994db 100644
--- a/tests/auto/quick3d/quick3dnodeinstantiator/data/inactive.qml
+++ b/tests/auto/quick3d/quick3dnodeinstantiator/data/inactive.qml
@@ -1,10 +1,12 @@
import QtQml 2.1
import Qt3D.Core 2.0
-NodeInstantiator {
- active: false
- Entity {
- property bool success: true
- property int idx: index
+Entity {
+ NodeInstantiator {
+ active: false
+ Entity {
+ property bool success: true
+ property int idx: index
+ }
}
}
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/data/stringModel.qml b/tests/auto/quick3d/quick3dnodeinstantiator/data/stringModel.qml
index 431c1ebd8..5aa4d399a 100644
--- a/tests/auto/quick3d/quick3dnodeinstantiator/data/stringModel.qml
+++ b/tests/auto/quick3d/quick3dnodeinstantiator/data/stringModel.qml
@@ -1,10 +1,12 @@
import QtQml 2.1
import Qt3D.Core 2.0
-NodeInstantiator {
- model: ["alpha", "beta", "gamma", "delta"]
- delegate: Entity {
- property bool success: index == 1 ? datum.length == 4 : datum.length == 5
- property string datum: modelData
+Entity {
+ NodeInstantiator {
+ model: ["alpha", "beta", "gamma", "delta"]
+ delegate: Entity {
+ property bool success: index == 1 ? datum.length == 4 : datum.length == 5
+ property string datum: modelData
+ }
}
}
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp b/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp
index fd7f0eb0c..acaba6690 100644
--- a/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp
+++ b/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp
@@ -60,7 +60,9 @@ void tst_quick3dnodeinstantiator::createNone()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createNone.qml"));
- Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create());
+ const auto root = qobject_cast<Qt3DCore::QNode*>(component.create());
+ QVERIFY(root != 0);
+ const auto instantiator = root->findChild<Quick3DNodeInstantiator*>();
QVERIFY(instantiator != 0);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 0);
@@ -72,7 +74,9 @@ void tst_quick3dnodeinstantiator::createSingle()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createSingle.qml"));
- Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create());
+ const auto root = qobject_cast<Qt3DCore::QNode*>(component.create());
+ QVERIFY(root != 0);
+ const auto instantiator = root->findChild<Quick3DNodeInstantiator*>();
QVERIFY(instantiator != 0);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 1);
@@ -80,7 +84,7 @@ void tst_quick3dnodeinstantiator::createSingle()
QObject *object = instantiator->object();
QVERIFY(object);
- QCOMPARE(object->parent(), instantiator);
+ QCOMPARE(object->parent(), root);
QCOMPARE(object->property("success").toBool(), true);
QCOMPARE(object->property("idx").toInt(), 0);
}
@@ -89,7 +93,9 @@ void tst_quick3dnodeinstantiator::createMultiple()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createMultiple.qml"));
- Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create());
+ const auto root = qobject_cast<Qt3DCore::QNode*>(component.create());
+ QVERIFY(root != 0);
+ const auto instantiator = root->findChild<Quick3DNodeInstantiator*>();
QVERIFY(instantiator != 0);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 10);
@@ -97,7 +103,7 @@ void tst_quick3dnodeinstantiator::createMultiple()
for (int i = 0; i < 10; i++) {
QObject *object = instantiator->objectAt(i);
QVERIFY(object);
- QCOMPARE(object->parent(), instantiator);
+ QCOMPARE(object->parent(), root);
QCOMPARE(object->property("success").toBool(), true);
QCOMPARE(object->property("idx").toInt(), i);
}
@@ -107,7 +113,9 @@ void tst_quick3dnodeinstantiator::stringModel()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("stringModel.qml"));
- Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create());
+ const auto root = qobject_cast<Qt3DCore::QNode*>(component.create());
+ QVERIFY(root != 0);
+ const auto instantiator = root->findChild<Quick3DNodeInstantiator*>();
QVERIFY(instantiator != 0);
QCOMPARE(instantiator->isActive(), true);
QCOMPARE(instantiator->count(), 4);
@@ -115,7 +123,7 @@ void tst_quick3dnodeinstantiator::stringModel()
for (int i = 0; i < 4; i++) {
QObject *object = instantiator->objectAt(i);
QVERIFY(object);
- QCOMPARE(object->parent(), instantiator);
+ QCOMPARE(object->parent(), root);
QCOMPARE(object->property("success").toBool(), true);
}
}
@@ -124,7 +132,9 @@ void tst_quick3dnodeinstantiator::activeProperty()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("inactive.qml"));
- Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create());
+ const auto root = qobject_cast<Qt3DCore::QNode*>(component.create());
+ QVERIFY(root != 0);
+ const auto instantiator = root->findChild<Quick3DNodeInstantiator*>();
QVERIFY(instantiator != 0);
QSignalSpy activeSpy(instantiator, SIGNAL(activeChanged()));
QSignalSpy countSpy(instantiator, SIGNAL(countChanged()));
@@ -150,7 +160,7 @@ void tst_quick3dnodeinstantiator::activeProperty()
QObject *object = instantiator->object();
QVERIFY(object);
- QCOMPARE(object->parent(), instantiator);
+ QCOMPARE(object->parent(), root);
QCOMPARE(object->property("success").toBool(), true);
QCOMPARE(object->property("idx").toInt(), 0);
}
@@ -159,7 +169,9 @@ void tst_quick3dnodeinstantiator::intModelChange()
{
QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("createMultiple.qml"));
- Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create());
+ const auto root = qobject_cast<Qt3DCore::QNode*>(component.create());
+ QVERIFY(root != 0);
+ const auto instantiator = root->findChild<Quick3DNodeInstantiator*>();
QVERIFY(instantiator != 0);
QSignalSpy activeSpy(instantiator, SIGNAL(activeChanged()));
QSignalSpy countSpy(instantiator, SIGNAL(countChanged()));
@@ -183,7 +195,7 @@ void tst_quick3dnodeinstantiator::intModelChange()
for (int i = 0; i < 2; i++) {
QObject *object = instantiator->objectAt(i);
QVERIFY(object);
- QCOMPARE(object->parent(), instantiator);
+ QCOMPARE(object->parent(), root);
QCOMPARE(object->property("success").toBool(), true);
QCOMPARE(object->property("idx").toInt(), i);
}