aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmldelegatemodel
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2024-02-05 12:51:24 +0100
committerUlf Hermann <ulf.hermann@qt.io>2024-02-09 17:41:47 +0100
commit72c8d39da2afd5c2a9c94869aa79a62bca89c803 (patch)
tree75e300ab9c67fd19b2e8be7ebefb8125ee337345 /tests/auto/qml/qqmldelegatemodel
parent9859107081b2af18b2964d6e22e3c425ff4e7cdf (diff)
QmlModels: Make model object properties non-FINAL again
You can override them from your model after all. The anonymous properties can be final, though. They're impossible to override. Amends commit 2af5cc0a7f62680f41e83f32d2ecac502db5c1e7. Pick-to: 6.7 6.6 Fixes: QTBUG-120499 Change-Id: Ib251f8a1845366074faec2db4914855c04b4db34 Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io> Reviewed-by: Vladimir Belyavsky <belyavskyv@gmail.com> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'tests/auto/qml/qqmldelegatemodel')
-rw-r--r--tests/auto/qml/qqmldelegatemodel/data/overriddenModelData.qml55
-rw-r--r--tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp29
2 files changed, 84 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmldelegatemodel/data/overriddenModelData.qml b/tests/auto/qml/qqmldelegatemodel/data/overriddenModelData.qml
new file mode 100644
index 0000000000..e392b2e5c9
--- /dev/null
+++ b/tests/auto/qml/qqmldelegatemodel/data/overriddenModelData.qml
@@ -0,0 +1,55 @@
+import QtQml
+
+DelegateModel {
+ id: root
+
+ property ListModel listModel: ListModel {
+ ListElement {
+ modelData: "a"
+ row: "b"
+ column: "c"
+ model: "d"
+ hasModelChildren: "e"
+ index: "f"
+ }
+ }
+
+ property var array: [{
+ modelData: "a",
+ row: "b",
+ column: "c",
+ model: "d",
+ hasModelChildren: "e",
+ index: "f"
+ }]
+
+ property QtObject object: QtObject {
+ property string modelData: "a"
+ property string row: "b"
+ property string column: "c"
+ property string model: "d"
+ property string hasModelChildren: "e"
+ property string index: "f"
+ }
+
+ property int n: -1
+
+ model: {
+ switch (n) {
+ case 0: return listModel
+ case 1: return array
+ case 2: return object
+ }
+ return undefined;
+ }
+
+ delegate: QtObject {
+ required property string modelData
+ required property string row
+ required property string column
+ required property string model
+ required property string hasModelChildren
+ required property string index
+ objectName: [modelData, row, column, model, hasModelChildren, index].join(" ")
+ }
+}
diff --git a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
index c3b184e869..e3fa762b25 100644
--- a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
+++ b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
@@ -35,6 +35,7 @@ private slots:
void universalModelData();
void typedModelData();
void requiredModelData();
+ void overriddenModelData();
void deleteRace();
void persistedItemsStayInCache();
void unknownContainersAsModel();
@@ -474,6 +475,34 @@ void tst_QQmlDelegateModel::requiredModelData()
}
}
+void tst_QQmlDelegateModel::overriddenModelData()
+{
+ QTest::failOnWarning(QRegularExpression(
+ "Final member [^ ]+ is overridden in class [^\\.]+. The override won't be used."));
+
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("overriddenModelData.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+
+ QQmlDelegateModel *delegateModel = qobject_cast<QQmlDelegateModel *>(o.data());
+ QVERIFY(delegateModel);
+
+ for (int i = 0; i < 3; ++i) {
+ delegateModel->setProperty("n", i);
+ QObject *delegate = delegateModel->object(0);
+ QVERIFY(delegate);
+
+ if (i == 2) {
+ // Someone is certainly relying on this.
+ // We need to find a migration mechanism to fix it.
+ QEXPECT_FAIL("", "You can actually not override if the model is a QObject", Continue);
+ }
+
+ QCOMPARE(delegate->objectName(), QLatin1String("a b c d e f"));
+ }
+}
+
void tst_QQmlDelegateModel::deleteRace()
{
QQmlEngine engine;