<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qt/qtdeclarative.git/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp, branch dev</title>
<subtitle>Qt Declarative (Quick 2)
</subtitle>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/'/>
<entry>
<title>QQmlPropertyToPropertyBinding: Use JS type coercion</title>
<updated>2026-04-22T08:21:32+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2026-04-20T06:33:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=7c8cb7eb67df93ef6232ef498c97f460e822a984'/>
<id>7c8cb7eb67df93ef6232ef498c97f460e822a984</id>
<content type='text'>
When QAbstractItemModel::data() returns an invalid QVariant (representing
'undefined' in JS) for a role bound to a typed property like
'required property string foo', the property-to-property binding's write
was silently failing. This happened because writeValueProperty() only uses
QMetaType conversions which cannot convert an invalid QVariant to a
QString. The property kept its old value, and subsequent valid writes
of the same value would not trigger change signals.

Update QQmlPropertyToUnbindablePropertyBinding::update() to perform
proper type coercion using metaTypeToJS() and metaTypeFromJS().

Pick-to: 6.11
Fixes: QTBUG-145016
Change-Id: I8421e813ddde50d4c252907045448b22a36a0a70
Reviewed-by: Olivier De Cannière &lt;olivier.decanniere@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When QAbstractItemModel::data() returns an invalid QVariant (representing
'undefined' in JS) for a role bound to a typed property like
'required property string foo', the property-to-property binding's write
was silently failing. This happened because writeValueProperty() only uses
QMetaType conversions which cannot convert an invalid QVariant to a
QString. The property kept its old value, and subsequent valid writes
of the same value would not trigger change signals.

Update QQmlPropertyToUnbindablePropertyBinding::update() to perform
proper type coercion using metaTypeToJS() and metaTypeFromJS().

Pick-to: 6.11
Fixes: QTBUG-145016
Change-Id: I8421e813ddde50d4c252907045448b22a36a0a70
Reviewed-by: Olivier De Cannière &lt;olivier.decanniere@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QtQml: Fix leaks in QQmlIncubator</title>
<updated>2026-03-05T13:44:25+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2026-03-03T09:33:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=8ca392b7bb429696c42ab531714522faa7c1f68e'/>
<id>8ca392b7bb429696c42ab531714522faa7c1f68e</id>
<content type='text'>
When a QQmlIncubator is destroyed during statusChanged(Loading), the
QRecursionWatcher doesn't detect this (it only detects nested
changeStatus calls). This caused incubate() to still run, creating an
object (result) that no one would ever free. Check p-&gt;q before calling
incubate() to avoid that.

When required properties are unset, the error path in incubate()
creates the object (result) but never deletes it when errors occur.
Delete result in both the Execute phase error path and the
finishIncubate error path.

This requires a small fix to QQuickStackElement. QQuickStackElement
would repeatedly try to initialize an item when the initialization had
already failed and then inconsistently early return on the second
attempt, leaving a dangling pointer around. Check the "init" flag
rather than "item" to determine whether we should initialize.

Pick-to: 6.11 6.10 6.8
Change-Id: I7bc47e4e02011d4a8e04f8b5da702bfc62f0c0a3
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a QQmlIncubator is destroyed during statusChanged(Loading), the
QRecursionWatcher doesn't detect this (it only detects nested
changeStatus calls). This caused incubate() to still run, creating an
object (result) that no one would ever free. Check p-&gt;q before calling
incubate() to avoid that.

When required properties are unset, the error path in incubate()
creates the object (result) but never deletes it when errors occur.
Delete result in both the Execute phase error path and the
finishIncubate error path.

This requires a small fix to QQuickStackElement. QQuickStackElement
would repeatedly try to initialize an item when the initialization had
already failed and then inconsistently early return on the second
attempt, leaving a dangling pointer around. Check the "init" flag
rather than "item" to determine whether we should initialize.

Pick-to: 6.11 6.10 6.8
Change-Id: I7bc47e4e02011d4a8e04f8b5da702bfc62f0c0a3
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QmlModels: fix QQmlDMAbstractItemModelData override warning</title>
<updated>2026-02-24T12:26:12+00:00</updated>
<author>
<name>Dmitrii Akshintsev</name>
<email>dmitrii.akshintsev@qt.io</email>
</author>
<published>2026-02-17T10:17:25+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=1c967f5f5998b3124a1d30180914d20d66b53860'/>
<id>1c967f5f5998b3124a1d30180914d20d66b53860</id>
<content type='text'>
Roles act like properties. When a role has the
same name as a property it constitutes an override.
Currently we preserve the old behavior and simply allow such
overrides, making an override of a property by a role as final,
we might want to warn about them in the future.

amends a910cd9f1379e87953922a7642f313ef980ae9a2

Change-Id: I91be241109c8eb017c5b657292406dd831afd623
Task-number: QTBUG-98320
Pick-to: 6.11 6.11.0
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
Reviewed-by: Ulf Hermann &lt;ulf.hermann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Roles act like properties. When a role has the
same name as a property it constitutes an override.
Currently we preserve the old behavior and simply allow such
overrides, making an override of a property by a role as final,
we might want to warn about them in the future.

amends a910cd9f1379e87953922a7642f313ef980ae9a2

Change-Id: I91be241109c8eb017c5b657292406dd831afd623
Task-number: QTBUG-98320
Pick-to: 6.11 6.11.0
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
Reviewed-by: Ulf Hermann &lt;ulf.hermann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QtQml: Demote the non-error case of OverridingNonVirtual to qCDebug()</title>
<updated>2026-02-24T01:55:52+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2026-02-23T08:36:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=2b82f2fbd1cdf47ba1adf737554f33c6f8576692'/>
<id>2b82f2fbd1cdf47ba1adf737554f33c6f8576692</id>
<content type='text'>
There are too many of those in Qt code and we haven't properly announced
our intention to warn about shadowing.

Task-number: QTBUG-98320
Pick-to: 6.11 6.11.0
Change-Id: I048b555131c2912972362626f3f39077cc9df656
Reviewed-by: Fabian Kosmale &lt;fabian.kosmale@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There are too many of those in Qt code and we haven't properly announced
our intention to warn about shadowing.

Task-number: QTBUG-98320
Pick-to: 6.11 6.11.0
Change-Id: I048b555131c2912972362626f3f39077cc9df656
Reviewed-by: Fabian Kosmale &lt;fabian.kosmale@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QQmlPropertyCache expand Override Semantics. MetaObject path</title>
<updated>2026-02-04T17:55:15+00:00</updated>
<author>
<name>Dmitrii Akshintsev</name>
<email>dmitrii.akshintsev@qt.io</email>
</author>
<published>2025-10-15T18:42:26+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=a910cd9f1379e87953922a7642f313ef980ae9a2'/>
<id>a910cd9f1379e87953922a7642f313ef980ae9a2</id>
<content type='text'>
This commit enables expanded Override Semantics for the properties
added from the MetaObject path.

It also introduces logging categories, so some of them could be silenced
when they are not actionable for the user

Task-number: QTBUG-98320
Change-Id: Ifb414ab795bc78f23a151666bb0d8af9b7a18d76
Pick-to: 6.11
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
Reviewed-by: Ulf Hermann &lt;ulf.hermann@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit enables expanded Override Semantics for the properties
added from the MetaObject path.

It also introduces logging categories, so some of them could be silenced
when they are not actionable for the user

Task-number: QTBUG-98320
Change-Id: Ifb414ab795bc78f23a151666bb0d8af9b7a18d76
Pick-to: 6.11
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
Reviewed-by: Ulf Hermann &lt;ulf.hermann@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QmlModels: Don't allow object disposal if m_objectStrongRef != 0</title>
<updated>2026-02-02T23:20:54+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2026-01-30T12:48:34+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=d85bbb66adbe68ed2da48cc361619d9a333c4ee5'/>
<id>d85bbb66adbe68ed2da48cc361619d9a333c4ee5</id>
<content type='text'>
The return value from releaseObjectWeak() is generally used to determine
whether we can get rid of the cache item. Before splitting the object
reference it checked the composite of both kinds of references. Restore
that behavior by checking both explicitly now.

Amends commit e4db77906b3f8bdcbe2ee20ff62ad818c6817e24

Pick-to: 6.11
Fixes: QTBUG-143733
Change-Id: I009ed93ea0d56b19f530175db6e9156deb7afaab
Reviewed-by: Fabian Kosmale &lt;fabian.kosmale@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The return value from releaseObjectWeak() is generally used to determine
whether we can get rid of the cache item. Before splitting the object
reference it checked the composite of both kinds of references. Restore
that behavior by checking both explicitly now.

Amends commit e4db77906b3f8bdcbe2ee20ff62ad818c6817e24

Pick-to: 6.11
Fixes: QTBUG-143733
Change-Id: I009ed93ea0d56b19f530175db6e9156deb7afaab
Reviewed-by: Fabian Kosmale &lt;fabian.kosmale@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QmlModels: Release object reference when we're done with the cache</title>
<updated>2026-01-30T18:00:10+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2026-01-29T08:12:10+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=4adce71f8b8ae73e332d1873b56cc615cf80a1c0'/>
<id>4adce71f8b8ae73e332d1873b56cc615cf80a1c0</id>
<content type='text'>
emitChanges() may release cache items. If we still hold a strong object
reference at that point, the reference counts can get out of sync.

Amends commit e4db77906b3f8bdcbe2ee20ff62ad818c6817e24.

Pick-to: 6.11
Fixes: QTBUG-143262
Change-Id: I17cea127528685ecd1052f61902c2880cc9f1f84
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
emitChanges() may release cache items. If we still hold a strong object
reference at that point, the reference counts can get out of sync.

Amends commit e4db77906b3f8bdcbe2ee20ff62ad818c6817e24.

Pick-to: 6.11
Fixes: QTBUG-143262
Change-Id: I17cea127528685ecd1052f61902c2880cc9f1f84
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Replace QVector with QList</title>
<updated>2026-01-09T19:44:46+00:00</updated>
<author>
<name>Shawn Rutledge</name>
<email>shawn.rutledge@qt.io</email>
</author>
<published>2026-01-08T18:16:07+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=941445ba18c8003948dc9bb9e257114ca13e12fb'/>
<id>941445ba18c8003948dc9bb9e257114ca13e12fb</id>
<content type='text'>
Since QVector is just an alias, let's finally do what we could have
done for Qt 6.0.

Pick-to: 6.11
Change-Id: Ia9dbc8ecf4f099339cf7639acb22c14b24fa680b
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since QVector is just an alias, let's finally do what we could have
done for Qt 6.0.

Pick-to: 6.11
Change-Id: Ia9dbc8ecf4f099339cf7639acb22c14b24fa680b
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QmlModels: Make drain() safe against being called recursively</title>
<updated>2025-11-05T18:48:38+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2025-11-03T17:56:20+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=7839701118e9b7fd67112fce161c1d27ba98a277'/>
<id>7839701118e9b7fd67112fce161c1d27ba98a277</id>
<content type='text'>
The callback can do pretty much anything, including another recursive
call to drain(). We need to make sure we're done with the container and
its iterators before we let that happen.

In the common case of maxPoolTime == 0, this is really easy. Simply swap
the container into a temporary and drain that. The case of maxPoolTime
!= 0 is a bit more complicated, but the algorithms library gives us a
way to do it with std::stable_partition and std::move that should be
good enough.

Fixes: QTBUG-102811
Pick-to: 6.10 6.8 6.5
Change-Id: Id67a9b9c2a7279536e5c2a315b139fcd8024e243
Reviewed-by: Richard Moe Gustavsen &lt;richard.gustavsen@qt.io&gt;
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The callback can do pretty much anything, including another recursive
call to drain(). We need to make sure we're done with the container and
its iterators before we let that happen.

In the common case of maxPoolTime == 0, this is really easy. Simply swap
the container into a temporary and drain that. The case of maxPoolTime
!= 0 is a bit more complicated, but the algorithms library gives us a
way to do it with std::stable_partition and std::move that should be
good enough.

Fixes: QTBUG-102811
Pick-to: 6.10 6.8 6.5
Change-Id: Id67a9b9c2a7279536e5c2a315b139fcd8024e243
Reviewed-by: Richard Moe Gustavsen &lt;richard.gustavsen@qt.io&gt;
Reviewed-by: Sami Shalayel &lt;sami.shalayel@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QmlModels: Test model-writing behavior of delegates</title>
<updated>2025-09-12T20:29:13+00:00</updated>
<author>
<name>Ulf Hermann</name>
<email>ulf.hermann@qt.io</email>
</author>
<published>2025-09-05T10:49:51+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=b8b1b94ceae758be1003e6e70b8dd28cc6378b7f'/>
<id>b8b1b94ceae758be1003e6e70b8dd28cc6378b7f</id>
<content type='text'>
When writing through a delegate, the original data is already written.
We are only missing change signals.

Pick-to: 6.10
Task-number: QTBUG-139941
Change-Id: I3124a8dc5852e3858a1e9bd9b74c07608bb5e446
Reviewed-by: Fabian Kosmale &lt;fabian.kosmale@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When writing through a delegate, the original data is already written.
We are only missing change signals.

Pick-to: 6.10
Task-number: QTBUG-139941
Change-Id: I3124a8dc5852e3858a1e9bd9b74c07608bb5e446
Reviewed-by: Fabian Kosmale &lt;fabian.kosmale@qt.io&gt;
</pre>
</div>
</content>
</entry>
</feed>
