Skip to content

Conversation

@rjcamatos
Copy link

If there are 2 or more methods with the same name but reciving diferent arguments the QJSEngine Pickup the First One declared.

Example:
methodxyz(string)
methodxyz(objptr*)

It picks up the first one passing as argument a string and not the one that i was expecting an object as it was send.

qtprojectorg pushed a commit that referenced this pull request Dec 8, 2023
Using std::binary_search has the requirement that the passed
range fulfils ordering requirements, which was not the case
for the cppKeywords array here.

As the QString doc says [1]:

> QStrings can be compared using overloaded operators such as operator<(),
> operator<=(), operator==(), operator>=(), and so on. Note that
> the comparison is based exclusively on the numeric Unicode
> values of the characters. It is very fast, but is not what a
> human would expect; (...)

Therefore, sort the array accordingly and add an assert to
ensure it will remain sorted.

Fixes an crash/assert when building qtdeclarative with
CXXFLAGS='-D_GLIBCXX_DEBUG':

    /usr/include/c++/13/bits/stl_algo.h:2243:
    In function:
        bool std::binary_search(_FIter, _FIter, const _Tp&) [with _FIter = const
        QString*; _Tp = QStringView]

    Error: elements in iterator range [first, last) are not partitioned by the
    value __val.

    Objects involved in the operation:
        iterator "first" @ 0x7ffc4a2c4f18 {
          type = QString const* (constant iterator);
        }
        iterator "last" @ 0x7ffc4a2c4f10 {
          type = QString const* (constant iterator);
        }
    Aborted (core dumped)
    ninja: build stopped: subcommand failed.

GDB backtrace:

    Program terminated with signal SIGABRT, Aborted.
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    44      ./nptl/pthread_kill.c: No such file or directory.
    (gdb) bt
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    #1  0x00007f307e0a815f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
    #2  0x00007f307e05a472 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
    #3  0x00007f307e0444b2 in __GI_abort () at ./stdlib/abort.c:79
    #4  0x00007f307e2a300d in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
    #5  0x00005639ff90471d in std::binary_search<QString const*, QStringView> (__first=0x5639ffa1a9c0 <QmltcVisitor::checkForNamingCollisionsWithCpp(QDeferredSharedPointer<QQmlJSScope const> const&)::cppKeywords>,
        __last=0x5639ffa1b2c0 <guard variable for QmltcVisitor::checkForNamingCollisionsWithCpp(QDeferredSharedPointer<QQmlJSScope const> const&)::cppKeywords>, __val=...) at /usr/include/c++/13/bits/stl_algo.h:2243
    #6  0x00005639ff8fb837 in operator() (__closure=0x7ffc4a2c52bf, word=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:764
    #7  0x00005639ff8fb89e in operator() (__closure=0x7ffc4a2c52a0, name=..., errorPrefix=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:768
    #8  0x00005639ff8fc99b in QmltcVisitor::checkForNamingCollisionsWithCpp (this=0x7ffc4a2c6070, type=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:787
    #9  0x00005639ff8f9dea in QmltcVisitor::endVisit (this=0x7ffc4a2c6070, program=0x563a002e0628) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltcvisitor.cpp:341
    #10 0x00007f307f6636fa in QQmlJS::AST::UiProgram::accept0 (this=0x563a002e0628, visitor=0x7ffc4a2c6070) at /home/michi/development/git/qt5/qtdeclarative/src/qml/parser/qqmljsast.cpp:1193
    #11 0x00007f3080159b8f in QQmlJS::AST::Node::accept (this=0x563a002e0628, visitor=0x7ffc4a2c6070)
        at /home/michi/development/git/qt5/qtbase/include/QtQml/6.7.0/QtQml/private/../../../../../../qtdeclarative/src/qml/parser/qqmljsast_p.h:272
    #12 0x00007f3080212f4b in QQmlJSTypeResolver::init (this=0x7ffc4a2c5b50, visitor=0x7ffc4a2c6070, program=0x563a002e0628) at /home/michi/development/git/qt5/qtdeclarative/src/qmlcompiler/qqmljstyperesolver.cpp:173
    #13 0x00005639ff8f0bd3 in QmltcTypeResolver::init (this=0x7ffc4a2c5b50, visitor=0x7ffc4a2c6070, program=0x563a002e0628) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltctyperesolver.cpp:19
    #14 0x00005639ff8c02d4 in main (argc=23, argv=0x7ffc4a2c7a68) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/main.cpp:269

[1] https://doc.qt.io/qt-6/qstring.html#comparing-strings

Change-Id: I82ebbcdca4ab90155b935f9af24b3a3821134563
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
@cla-assistant
Copy link

cla-assistant bot commented Nov 15, 2024

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
0 out of 13 committers have signed the CLA.

❌ Morten Sørvig
❌ ulfhermannqt
❌ alcroito
❌ BLumia
❌ ec1oud
❌ Inkane
❌ iCristalrope
❌ eskilblomfeldt
❌ dilekakcaay
❌ alcazaco
❌ mitchcurtis
❌ samishalayel
❌ marcmutz


Morten Sørvig seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

qtprojectorg pushed a commit that referenced this pull request Sep 9, 2025
Use dimmer as a context object rather than the test itself, which
outlives it.

The backtrace was:

    FAIL!  : tst_QQuickPopup::Basic::fadeDimmer(modal) The computed value is expected to be greater than the baseline, but is not
       Computed (opacityChangeCount): 2
       Baseline (2)                 : 2
       Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2629)]
    =================================================================
    ==68826==ERROR: AddressSanitizer: stack-use-after-scope on address 0x00016b7f7140 at pc 0x000104743c68 bp 0x00016b7ecfd0 sp 0x00016b7ecfc8
    READ of size 4 at 0x00016b7f7140 thread T0
        #0 0x000104743c64 in tst_QQuickPopup::fadeDimmer()::$_0::operator()() const tst_qquickpopup.cpp:2625
        #1 0x000104743bc0 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()::operator()() const qobjectdefs_impl.h:116
        #2 0x000104743b64 in void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()>(void**, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()&&) qobjectdefs_impl.h:65
        #3 0x000104743ab4 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**) qobjectdefs_impl.h:115
        #4 0x000104743930 in void QtPrivate::FunctorCallable<tst_QQuickPopup::fadeDimmer()::$_0>::call<QtPrivate::List<>, void>(tst_QQuickPopup::fadeDimmer()::$_0&, void*, void**) qobjectdefs_impl.h:337
        #5 0x000104743848 in QtPrivate::QCallableObject<tst_QQuickPopup::fadeDimmer()::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:547
        #6 0x00011694273c in QtPrivate::QSlotObjectBase::call(QObject*, void**) qobjectdefs_impl.h:461
        #7 0x000116e49454 in void doActivate<false>(QObject*, int, void**) qobject.cpp:4284
        #8 0x000116e467a0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) qobject.cpp:4344
        #9 0x00010c1462d4 in QQuickItem::opacityChanged() moc_qquickitem.cpp:1019
        #10 0x00010c1461c8 in QQuickItem::setOpacity(double) qquickitem.cpp:6517
        #11 0x00010c168638 in QQuickItem::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_qquickitem.cpp:850
        #12 0x000113847100 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:413
        #13 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #14 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #15 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #16 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #17 0x00010c9949ac in QQuickAnimationPropertyUpdater::setValue(double) qquickanimation.cpp:2740
        #18 0x00010c992444 in QQuickBulkValueAnimator::updateCurrentTime(int) qquickanimation.cpp:2069
        #19 0x000114345428 in QAbstractAnimationJob::setCurrentTime(int) qabstractanimationjob.cpp:481
        #20 0x000114349c3c in QAbstractAnimationJob::setState(QAbstractAnimationJob::State) qabstractanimationjob.cpp:367
        #21 0x00011434bc34 in QAbstractAnimationJob::start() qabstractanimationjob.cpp:514
        #22 0x00010c9ff568 in QQuickBehavior::write(QVariant const&) qquickbehavior.cpp:419
        #23 0x00010c9ff88c in non-virtual thunk to QQuickBehavior::write(QVariant const&) qquickbehavior.cpp
        #24 0x000113f53b7c in QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:392
        #25 0x000113f532e4 in QQmlInterceptorMetaObject::intercept(QMetaObject::Call, int, void**) qqmlvmemetaobject_p.h:153
        #26 0x000113f59788 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:750
        #27 0x0001138474d0 in void QQmlPropertyData::doMetacall<(QMetaObject::Call)2>(QObject*, int, void**) const qqmlpropertydata_p.h:395
        #28 0x000113847128 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:415
        #29 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #30 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #31 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #32 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #33 0x000113c38f84 in QQmlProperty::write(QVariant const&) const qqmlproperty.cpp:1863
        #34 0x000113c39358 in QQmlProperty::write(QObject*, QString const&, QVariant const&) qqmlproperty.cpp:1880
        #35 0x000107c1db04 in QQuickPopupPrivate::hideDimmer() qquickpopup.cpp:1290
        #36 0x000107c16a68 in QQuickPopupPrivate::prepareExitTransition() qquickpopup.cpp:821
        #37 0x000107c1e038 in QQuickPopupTransitionManager::transitionExit() qquickpopup.cpp:1326
        #38 0x000107c23fd4 in QQuickPopup::setVisible(bool) qquickpopup.cpp:2496
        #39 0x000107c104d8 in QQuickPopup::close() qquickpopup.cpp:1408
        #40 0x000107c1ba80 in QQuickPopup::setParentItem(QQuickItem*) qquickpopup.cpp:2180
        #41 0x000107c1b324 in QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp:1063
        #42 0x000107c1bb8c in non-virtual thunk to QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp
        #43 0x00010c117f70 in void QQuickItemPrivate::notifyChangeListeners<void (QQuickItemChangeListener::*)(QQuickItem*), QQuickItem*>(QFlags<QQuickItemPrivate::ChangeType>, void (QQuickItemChangeListener::*&&)(QQuickItem*), QQuickItem*&&) qquickitem_p.h:413
        #44 0x00010c113d7c in QQuickItem::~QQuickItem() qquickitem.cpp:2420
        #45 0x00010c50e3e8 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #46 0x00010c4ed840 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #47 0x00010c4ed86c in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #48 0x00010c4da1c0 in QQuickWindow::~QQuickWindow() qquickwindow.cpp:1197
        #49 0x00010c531f34 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() qquickwindowmodule.cpp:73
        #50 0x00010cf2d4f4 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:104
        #51 0x00010cf2d3e0 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #52 0x00010cf2d40c in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #53 0x00010472efa8 in QScopedPointerDeleter<QObject>::cleanup(QObject*) qscopedpointer.h:24
        #54 0x00010472eefc in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:81
        #55 0x00010466f0e8 in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:79
        #56 0x00010471246c in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #57 0x00010468ff88 in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #58 0x0001046a953c in tst_QQuickPopup::fadeDimmer() tst_qquickpopup.cpp:2635
        [...]

Amends ef8bde8.

Pick-to: 6.8 6.9 6.10
Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
qtprojectorg pushed a commit that referenced this pull request Sep 12, 2025
Use dimmer as a context object rather than the test itself, which
outlives it.

The backtrace was:

    FAIL!  : tst_QQuickPopup::Basic::fadeDimmer(modal) The computed value is expected to be greater than the baseline, but is not
       Computed (opacityChangeCount): 2
       Baseline (2)                 : 2
       Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2629)]
    =================================================================
    ==68826==ERROR: AddressSanitizer: stack-use-after-scope on address 0x00016b7f7140 at pc 0x000104743c68 bp 0x00016b7ecfd0 sp 0x00016b7ecfc8
    READ of size 4 at 0x00016b7f7140 thread T0
        #0 0x000104743c64 in tst_QQuickPopup::fadeDimmer()::$_0::operator()() const tst_qquickpopup.cpp:2625
        #1 0x000104743bc0 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()::operator()() const qobjectdefs_impl.h:116
        #2 0x000104743b64 in void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()>(void**, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()&&) qobjectdefs_impl.h:65
        #3 0x000104743ab4 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**) qobjectdefs_impl.h:115
        #4 0x000104743930 in void QtPrivate::FunctorCallable<tst_QQuickPopup::fadeDimmer()::$_0>::call<QtPrivate::List<>, void>(tst_QQuickPopup::fadeDimmer()::$_0&, void*, void**) qobjectdefs_impl.h:337
        #5 0x000104743848 in QtPrivate::QCallableObject<tst_QQuickPopup::fadeDimmer()::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:547
        #6 0x00011694273c in QtPrivate::QSlotObjectBase::call(QObject*, void**) qobjectdefs_impl.h:461
        #7 0x000116e49454 in void doActivate<false>(QObject*, int, void**) qobject.cpp:4284
        #8 0x000116e467a0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) qobject.cpp:4344
        #9 0x00010c1462d4 in QQuickItem::opacityChanged() moc_qquickitem.cpp:1019
        #10 0x00010c1461c8 in QQuickItem::setOpacity(double) qquickitem.cpp:6517
        #11 0x00010c168638 in QQuickItem::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_qquickitem.cpp:850
        #12 0x000113847100 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:413
        #13 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #14 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #15 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #16 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #17 0x00010c9949ac in QQuickAnimationPropertyUpdater::setValue(double) qquickanimation.cpp:2740
        #18 0x00010c992444 in QQuickBulkValueAnimator::updateCurrentTime(int) qquickanimation.cpp:2069
        #19 0x000114345428 in QAbstractAnimationJob::setCurrentTime(int) qabstractanimationjob.cpp:481
        #20 0x000114349c3c in QAbstractAnimationJob::setState(QAbstractAnimationJob::State) qabstractanimationjob.cpp:367
        #21 0x00011434bc34 in QAbstractAnimationJob::start() qabstractanimationjob.cpp:514
        #22 0x00010c9ff568 in QQuickBehavior::write(QVariant const&) qquickbehavior.cpp:419
        #23 0x00010c9ff88c in non-virtual thunk to QQuickBehavior::write(QVariant const&) qquickbehavior.cpp
        #24 0x000113f53b7c in QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:392
        #25 0x000113f532e4 in QQmlInterceptorMetaObject::intercept(QMetaObject::Call, int, void**) qqmlvmemetaobject_p.h:153
        #26 0x000113f59788 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:750
        #27 0x0001138474d0 in void QQmlPropertyData::doMetacall<(QMetaObject::Call)2>(QObject*, int, void**) const qqmlpropertydata_p.h:395
        #28 0x000113847128 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:415
        #29 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #30 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #31 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #32 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #33 0x000113c38f84 in QQmlProperty::write(QVariant const&) const qqmlproperty.cpp:1863
        #34 0x000113c39358 in QQmlProperty::write(QObject*, QString const&, QVariant const&) qqmlproperty.cpp:1880
        #35 0x000107c1db04 in QQuickPopupPrivate::hideDimmer() qquickpopup.cpp:1290
        #36 0x000107c16a68 in QQuickPopupPrivate::prepareExitTransition() qquickpopup.cpp:821
        #37 0x000107c1e038 in QQuickPopupTransitionManager::transitionExit() qquickpopup.cpp:1326
        #38 0x000107c23fd4 in QQuickPopup::setVisible(bool) qquickpopup.cpp:2496
        #39 0x000107c104d8 in QQuickPopup::close() qquickpopup.cpp:1408
        #40 0x000107c1ba80 in QQuickPopup::setParentItem(QQuickItem*) qquickpopup.cpp:2180
        #41 0x000107c1b324 in QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp:1063
        #42 0x000107c1bb8c in non-virtual thunk to QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp
        #43 0x00010c117f70 in void QQuickItemPrivate::notifyChangeListeners<void (QQuickItemChangeListener::*)(QQuickItem*), QQuickItem*>(QFlags<QQuickItemPrivate::ChangeType>, void (QQuickItemChangeListener::*&&)(QQuickItem*), QQuickItem*&&) qquickitem_p.h:413
        #44 0x00010c113d7c in QQuickItem::~QQuickItem() qquickitem.cpp:2420
        #45 0x00010c50e3e8 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #46 0x00010c4ed840 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #47 0x00010c4ed86c in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #48 0x00010c4da1c0 in QQuickWindow::~QQuickWindow() qquickwindow.cpp:1197
        #49 0x00010c531f34 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() qquickwindowmodule.cpp:73
        #50 0x00010cf2d4f4 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:104
        #51 0x00010cf2d3e0 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #52 0x00010cf2d40c in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #53 0x00010472efa8 in QScopedPointerDeleter<QObject>::cleanup(QObject*) qscopedpointer.h:24
        #54 0x00010472eefc in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:81
        #55 0x00010466f0e8 in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:79
        #56 0x00010471246c in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #57 0x00010468ff88 in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #58 0x0001046a953c in tst_QQuickPopup::fadeDimmer() tst_qquickpopup.cpp:2635
        [...]

Amends ef8bde8.

Pick-to: 6.9 6.8
Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit f8742ca)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
qtprojectorg pushed a commit that referenced this pull request Sep 12, 2025
Use dimmer as a context object rather than the test itself, which
outlives it.

The backtrace was:

    FAIL!  : tst_QQuickPopup::Basic::fadeDimmer(modal) The computed value is expected to be greater than the baseline, but is not
       Computed (opacityChangeCount): 2
       Baseline (2)                 : 2
       Loc: [/Users/mitch/dev/qt-dev2/qtdeclarative/tests/auto/quickcontrols/qquickpopup/tst_qquickpopup.cpp(2629)]
    =================================================================
    ==68826==ERROR: AddressSanitizer: stack-use-after-scope on address 0x00016b7f7140 at pc 0x000104743c68 bp 0x00016b7ecfd0 sp 0x00016b7ecfc8
    READ of size 4 at 0x00016b7f7140 thread T0
        #0 0x000104743c64 in tst_QQuickPopup::fadeDimmer()::$_0::operator()() const tst_qquickpopup.cpp:2625
        #1 0x000104743bc0 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()::operator()() const qobjectdefs_impl.h:116
        #2 0x000104743b64 in void QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()>(void**, QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**)::'lambda'()&&) qobjectdefs_impl.h:65
        #3 0x000104743ab4 in QtPrivate::FunctorCall<std::__1::integer_sequence<unsigned long>, QtPrivate::List<>, void, tst_QQuickPopup::fadeDimmer()::$_0>::call(tst_QQuickPopup::fadeDimmer()::$_0&, void**) qobjectdefs_impl.h:115
        #4 0x000104743930 in void QtPrivate::FunctorCallable<tst_QQuickPopup::fadeDimmer()::$_0>::call<QtPrivate::List<>, void>(tst_QQuickPopup::fadeDimmer()::$_0&, void*, void**) qobjectdefs_impl.h:337
        #5 0x000104743848 in QtPrivate::QCallableObject<tst_QQuickPopup::fadeDimmer()::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:547
        #6 0x00011694273c in QtPrivate::QSlotObjectBase::call(QObject*, void**) qobjectdefs_impl.h:461
        #7 0x000116e49454 in void doActivate<false>(QObject*, int, void**) qobject.cpp:4284
        #8 0x000116e467a0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) qobject.cpp:4344
        #9 0x00010c1462d4 in QQuickItem::opacityChanged() moc_qquickitem.cpp:1019
        #10 0x00010c1461c8 in QQuickItem::setOpacity(double) qquickitem.cpp:6517
        #11 0x00010c168638 in QQuickItem::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) moc_qquickitem.cpp:850
        #12 0x000113847100 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:413
        #13 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #14 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #15 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #16 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #17 0x00010c9949ac in QQuickAnimationPropertyUpdater::setValue(double) qquickanimation.cpp:2740
        #18 0x00010c992444 in QQuickBulkValueAnimator::updateCurrentTime(int) qquickanimation.cpp:2069
        #19 0x000114345428 in QAbstractAnimationJob::setCurrentTime(int) qabstractanimationjob.cpp:481
        #20 0x000114349c3c in QAbstractAnimationJob::setState(QAbstractAnimationJob::State) qabstractanimationjob.cpp:367
        #21 0x00011434bc34 in QAbstractAnimationJob::start() qabstractanimationjob.cpp:514
        #22 0x00010c9ff568 in QQuickBehavior::write(QVariant const&) qquickbehavior.cpp:419
        #23 0x00010c9ff88c in non-virtual thunk to QQuickBehavior::write(QVariant const&) qquickbehavior.cpp
        #24 0x000113f53b7c in QQmlInterceptorMetaObject::doIntercept(QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:392
        #25 0x000113f532e4 in QQmlInterceptorMetaObject::intercept(QMetaObject::Call, int, void**) qqmlvmemetaobject_p.h:153
        #26 0x000113f59788 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) qqmlvmemetaobject.cpp:750
        #27 0x0001138474d0 in void QQmlPropertyData::doMetacall<(QMetaObject::Call)2>(QObject*, int, void**) const qqmlpropertydata_p.h:395
        #28 0x000113847128 in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const qqmlpropertydata_p.h:415
        #29 0x000113c33468 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1668
        #30 0x000113c32638 in QQmlPropertyPrivate::writeValueProperty(QObject*, QQmlPropertyData const&, QQmlPropertyData const&, QVariant const&, QQmlRefPointer<QQmlContextData> const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1326
        #31 0x000113c32390 in QQmlPropertyPrivate::writeValueProperty(QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1270
        #32 0x000113c391b4 in QQmlPropertyPrivate::write(QQmlProperty const&, QVariant const&, QFlags<QQmlPropertyData::WriteFlag>) qqmlproperty.cpp:1947
        #33 0x000113c38f84 in QQmlProperty::write(QVariant const&) const qqmlproperty.cpp:1863
        #34 0x000113c39358 in QQmlProperty::write(QObject*, QString const&, QVariant const&) qqmlproperty.cpp:1880
        #35 0x000107c1db04 in QQuickPopupPrivate::hideDimmer() qquickpopup.cpp:1290
        #36 0x000107c16a68 in QQuickPopupPrivate::prepareExitTransition() qquickpopup.cpp:821
        #37 0x000107c1e038 in QQuickPopupTransitionManager::transitionExit() qquickpopup.cpp:1326
        #38 0x000107c23fd4 in QQuickPopup::setVisible(bool) qquickpopup.cpp:2496
        #39 0x000107c104d8 in QQuickPopup::close() qquickpopup.cpp:1408
        #40 0x000107c1ba80 in QQuickPopup::setParentItem(QQuickItem*) qquickpopup.cpp:2180
        #41 0x000107c1b324 in QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp:1063
        #42 0x000107c1bb8c in non-virtual thunk to QQuickPopupPrivate::itemDestroyed(QQuickItem*) qquickpopup.cpp
        #43 0x00010c117f70 in void QQuickItemPrivate::notifyChangeListeners<void (QQuickItemChangeListener::*)(QQuickItem*), QQuickItem*>(QFlags<QQuickItemPrivate::ChangeType>, void (QQuickItemChangeListener::*&&)(QQuickItem*), QQuickItem*&&) qquickitem_p.h:413
        #44 0x00010c113d7c in QQuickItem::~QQuickItem() qquickitem.cpp:2420
        #45 0x00010c50e3e8 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #46 0x00010c4ed840 in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #47 0x00010c4ed86c in QQuickRootItem::~QQuickRootItem() qquickwindow_p.h:62
        #48 0x00010c4da1c0 in QQuickWindow::~QQuickWindow() qquickwindow.cpp:1197
        #49 0x00010c531f34 in QQuickWindowQmlImpl::~QQuickWindowQmlImpl() qquickwindowmodule.cpp:73
        #50 0x00010cf2d4f4 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:104
        #51 0x00010cf2d3e0 in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #52 0x00010cf2d40c in QQmlPrivate::QQmlElement<QQuickWindowQmlImpl>::~QQmlElement() qqmlprivate.h:102
        #53 0x00010472efa8 in QScopedPointerDeleter<QObject>::cleanup(QObject*) qscopedpointer.h:24
        #54 0x00010472eefc in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:81
        #55 0x00010466f0e8 in QScopedPointer<QObject, QScopedPointerDeleter<QObject>>::~QScopedPointer() qscopedpointer.h:79
        #56 0x00010471246c in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #57 0x00010468ff88 in QQuickVisualTestUtils::QQuickApplicationHelper::~QQuickApplicationHelper() visualtestutils_p.h:192
        #58 0x0001046a953c in tst_QQuickPopup::fadeDimmer() tst_qquickpopup.cpp:2635
        [...]

Amends ef8bde8.

Pick-to: 6.8
Change-Id: Ie5c49b7d9ecd3c74f822590d296062b516563391
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit f8742ca)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit cc726a4)
samishalayel and others added 25 commits October 13, 2025 14:53
It seems that we call registerTypes on both static and dynamic plugins,
but qmlClearEnginePlugins only unregisters dynamic plugins. This could
cause incomplete cleanups in tests like tst_customization where
qmlClearEnginePlugins should unregister plugins in both dynamic and
static builds.

Allow QmlPlugin to also contain a static plugin instance, and adapt
unloadPlugin() to also unregister types from static plugins.

Task-number: QTBUG-133755
Change-Id: Idb5a8e2754600715d8c820a73ae35cbf8991967f
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
There does not seem to be an explanation for it, and it does not seem to
break the CI. Remove the macos special casing.

Change-Id: I94b8e3ff4129247c25e87d7401897b4871c3cdf6
Reviewed-by: Semih Yavuz <semih.yavuz@qt.io>
DEPENDENCIES is not a valid option for qt_internal_add_test(), it was
likely mistaken with the option from qt_add_qml_module.
Remove the option.

Gets rid of

CMake Error at
 qtdeclarative/tests/auto/qmlls/modules/cmake_install.cmake:51 (file):
 file INSTALL cannot find
 "qtdeclarative/tests/auto/qmlls/modules/DEPENDENCIES":
 No such file or directory.
Call Stack (most recent call first):
 qtdeclarative/tests/auto/qmlls/cmake_install.cmake:67 (include)

Amends cdd5cc9

Pick-to: 6.10
Fixes: QTBUG-141085
Change-Id: Idce92217375b753d4935be9c2441a7d439f867e4
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Fix the description: qmltypes files are made out of QML, not JSON.

Pick-to: 6.10 6.8
Change-Id: I42df0adb06ffebc4e58f12db280dc496e1c69c38
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Alexei Cazacov <alexei.cazacov@qt.io>
…test

In rare cases the mouse was lingering over the exact position of the
scroll bar as a result of other tests moving the mouse, which would
make the scrollbar never leave the active state, and hence keep
reporting a non-0 opacity.

We're programmatically activating the scroll bar via increment(),
so we don't need the scroll bar to be interactive to do the test.

Pick-to: 6.10 6.8 6.5
Change-Id: Id75b22d51277c3515fd4f448360bd576b45d69d8
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Change-Id: Id097b394eb38c791411730bb8624d9a1c508a785
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
The wheel event was stopping at a position where the cursor is very
near the edge of one delegate; let's stop a bit sooner so that it's
obviously inside.

Change-Id: I76ce618ffe321aeb4ff125a9f4342e62221724a5
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
By not testing for these extra errors they get treated as if the request itself
was a failure, rather than the server returning an error as a perfectly
valid response.

Amends 1faca90.

Pick-to: 6.10 6.8
Fixes: QTBUG-141063
Change-Id: I3c7aee696ada58de8f1c2dcf7d4c941e644c6ab1
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
The fact that a qmlfir file needs to be written manually when using
qmake was not really mentioned before.

Pick-to: 6.10 6.8 6.5
Change-Id: I174ade01d5e8bd28626939f7257717070c4d220f
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
When we paint text with any other style than Normal, we will offset
painting by up to 1 logical pixel. To avoid clipping the style, we
need to make sure the bounding rect of the text also accounts for
this. This does overestimate the bounding rect in cases where the
dpr is not 1, but this is better than underestimating it.

Pick-to: 6.10 6.8
Fixes: QTBUG-137404
Change-Id: I670a3709fcc6ac7fd6d58a8d524f534800cafdff
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
The setup was done, but the actual test was not.

Amends commit 8f1bfc0

Change-Id: I5a1b423b6790e9136e437be6cde6f96b2d4d54bc
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Remove the redundant Highlights class and move its functionality
directly into HighlightingVisitor. The redundant class was essentially
just a wrapper around highlighted token  container, which can be handled
more directly. Adapt  the tests.

Pick-to: 6.10 6.8
Task-number: QTBUG-140645
Change-Id: I739c69ea35bb1bec4a2e4c242189dd440d5df39f
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Rename Token struct to HighlightToken to better reflect its purpose and
avoid confusion with other generic token types.

Pick-to: 6.10 6.8
Task-number: QTBUG-140645
Change-Id: Ieba550aa3624eade3a3ce1c486dccdbfd2c67c22
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Introduce QmlHighlighting namespace for better organization. Move
utility functions to nested Utils namespace. Update all references
throughout the codebase accordingly.

Pick-to: 6.10 6.8
Task-number: QTBUG-140645
Change-Id: I3ad4e5fdd4abdfcb746441acf29594711af13f90
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Make the highlighted token class protocol agnostic by removing protocol
specific fields, and store  custom highlighting types and modifiers
instead. Move the logic that converts token types to protocol specific
integers to encodeSemanticTokens.
This simplifies HighlightingVisitor by removing protocol mapping
dependency and makes the tests protocol agnostic too. (before we weren't
testing QtC highlights).

Pick-to: 6.10 6.8
Task-number: QTBUG-140645
Change-Id: Ia0e84b50941f84855c4a1525f97a0d21da0f3947
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Overriding the function only to then call the base implementation and
nothing else is not very productive.

Change-Id: Ib3cba0d38de652c94689b0bac5e878f629e35bd3
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
All the conversion back and forth only adds noise and overhead. Use an
array of std::byte to trick the memory manager into believing that
QV4::Heap::UrlObject is still trivial.

Task-number: QTBUG-138545
Change-Id: Ic382741d441cfb8a7446d6c46ded77173325ce34
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
There were two different error messages that mean the same thing.

Change-Id: I656333ab089f345580e31d63cd8ce7412b223d04
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
The tree view inserts items into their parent during expansion in
QQmlTreeModelToTableModel::showModelChildItems. However, this causes
a problem when a new item is inserted and the same parent (which is
already expanded) is expanded again due to a change in its children,
resulting in a double insertion: once during the row insertion, and
other during expansion.

This patch prevents triggering
QQmlTreeModelToTableModel::showModelChildItems when the node was not
previously expanded but becomes expanded during insertion (for
example, when expand() is explicitly called due to child changes).

Fixes: QTBUG-139344
Pick-to: 6.10 6.8
Change-Id: Id88158b2628445c1aaafeff01dd5c9ff22e3c502
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
When the source height or width is not an integer number of pixels, the
texture size will be rounded up. This could cause the bottom/right edge
of the texture to be omitted, since the target size for the image node
was also not in whole pixels, and the pixel coverage for those edge
pixels could become <= 50%.
This patch rounds up the targetRect to match the texture size, so it
will be rendered at exactly 1:1 when the scale factor is 1. Note that
this only fixes the issue for integer scale factors, since the target
size is calculated in updatePaintNode, which is not called when the
scale changes.

Fixes: QTBUG-136783
Pick-to: 6.10 6.8
Change-Id: I0d04e4efa65d4a77f842fc3093a143ceb6666608
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Pick-to: 6.10
Task-number: QTBUG-140645
Change-Id: I002346ee4623d87dcf06484000a826958bbf2a64
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This change fixes setting the background or foreground explicitly to the
theme default. The value did not persist.

Example case for background:

The default m_hasBackground is false and background color is
globalBackground that is 0xFFFAFAFA, so if user sets the background
color to 0xFFFAFAFA the logic skips it by doing early out and doesn't
set m_hasBackground to true.

Fixes: QTBUG-140068
Change-Id: I26f1182d808354f34800dc62760e5498cbd77b3b
Pick-to: 6.10 6.8
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Resetting foreground and background values did not propagate to
children when the earlier value matched theme default.

Stop pre-clearing m_hasX/m_customX in reset. Clearing these variables
prevents propagating the values to children due to early exit
conditions in the inherit functions.

Clear only m_explicitX and call inherit with the parent's values.
m_hasX/m_customX values are then cleared in the inherit function,
if changed. This guarantees propagation to children even when the
color is unchanged.

Pick-to: 6.10 6.8
Change-Id: Ie4f7276d43afbfaf5b4d10ccf658f27000d640d9
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Because it's not important to the server what case the headers names
has.

Task-number: QTBUG-137203
Pick-to: 6.10 6.9
Change-Id: I4e030ec3a7f051d6d063f0bbc040d2d56b51fbea
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
QQuickTest::showView() already ensures that a window becomes visible.
We don't need to repeat that manually in the test after calling it.

Pick-to: 6.10
Change-Id: Id8cadeb619544ee7b871fdff98f4b93a8a0c52ed
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
samishalayel and others added 30 commits November 17, 2025 12:50
Use _qt_internal_collect_qml_import_paths() to collect import paths for
qmlls, qmllint and qmlimportscanner.
_qt_internal_collect_qml_import_paths was previously only used to
collect import paths for qmlimportscanner.

Adapt _qt_internal_collect_qml_import_paths to add the special qmllint
import path, and remove the duplicate code for qmllint and qmlls's
import path.

Fixes QTBUG-141242 where the path of the QML module is not in the import
path of qmlls when the QML module path is a subfolder of the build
folder.

Pick-to: 6.10
Fixes: QTBUG-141242
Fixes: QTBUG-141555
Change-Id: I9fa2cc091ca08be6df9da5d6cf4794c08d3dd0ce
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Iterate over all aliases that directly or indirectly points to the
required property, and check whether it is in the root file scope. If it
is in the root scope, than the required property can be satisfied by
setting the alias, and we shouldn't warn about unsatisfied required
properties int the QML component itself. Instead, we warn at the
place where the QML component is instantiated if the alias is not set.

Pick-to: 6.10
Task-number: QTBUG-141086
Change-Id: I9237d0afd2e427558ebc2b5cbc97beb5248ec6a3
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
It seems that the QML debugger framework cleanup does not happen
correctly when QApplication is leaked. Instead of running into the asserts
of QQmlDebugServerImpl::removeService and ~QObject (during destruction
of QQuickProfilerAdapter), warn the user with qFatal() about the
possible leak of QApplication.

Task-number: QTBUG-139131
Change-Id: If0497b3d4de4a1dec1bf968760d9fa79eb24683e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Qt Code should use file based includes.

Change-Id: I19a5b583c0df9c2c418c322ee1221afa1517f77b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The message is markdown, so actually use bullet points to show a list of
import paths. Previously, the single newlines got removed by Markdown
renderers (Markdown requires two newlines to render a newline) which
makes the list hard to read because all import paths were on the same
line.

Amends 299c449.

Task-number: QTBUG-140915
Change-Id: I39fd4ddb653ba93bf92705788f51d378321015e4
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Task-number: QTBUG-142016
Change-Id: I50e435bd6343fddcee26973467b3029555c2f983
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
…rrelevant

If a QEventPoint is clearly outside an item _and_ the bounds of all its
children, or is simply outside the bounds of an item that clips its children,
we can stop recursion, for purposes of QPointerEvent delivery, finding which
items/handlers are hovered, or which could control the cursor shape.

effectivelyClipsEventHandlingChildren() is also recursive, but at least
the result gets cached.

Task-number: QTBUG-140340
Task-number: QTBUG-115179
Change-Id: I085e38964de6993fa82ad3bd1256868125fde090
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Pick-to: 6.10 6.8
Change-Id: Idc096a96c3c6895b09a97b6ef2d644d8b0454b60
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
When running with Liquid Glass, a TextField/NSTextField
have a more rounded appearance. As such, this patch will
tweak the focus frame radius accordingly.

Pick-to: 6.10 6.9 6.8 6.5
Change-Id: I7918e4de5ca71aea2b5c080e58341bb4fa53c147
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Styles need a way to set the default icon color for controls. Until
now, that was done like this:

    icon.color: "tomato"

    contentItem: IconLabel {
        icon: control.icon
    }

This breaks the use case of e.g. an Action that sets its own
icon.color, because the icon property of the control always takes
precedence (see 146bc95).

This patch adds a defaultIconColor property to IconLabel, which allows
styles to specify a color without overriding any potential action's
icon:

    contentItem: IconLabel {
        icon: control.icon
        defaultIconColor: "tomato
    }

If icon.color was explicitly set, it is used instead.

This does mean that overriding the contentItem will result in the
icon color being lost, but that is already the case for style
customizations in general.

All controls that set icon.color and using IconLabel to display their
icon are affected and are therefore adapted: Button, CheckDelegate,
DelayButton, ItemDelegate, MenuBarItem, MenuItem, RadioDelegate,
RoundButton, SwipeDelegate, SwitchDelegate, TabButton, ToolButton.

Add FlowPane to the shared folder of the baseline test and use it in
the tests that we touch. This fixes two issues:
- Using Pane as the background fixes text being invisible for some
styles.
- Using Flow provides the most space-efficient layouting of items now
that we have more than would fit in the old layout.

Task-number: QTBUG-87459
Change-Id: I455ce7202a46b7cfa7545650574e48ad72796675
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
In QQuickAbstractButtonPrivate::updateEffectiveIcon we need to
resolve the icon's color so that QQuickIconLabel knows which of
defaultIconColor and icon.color should win.

In both QQuickAbstractButtonPrivate::updateEffectiveIcon and
QQuickAction::setIcon, we need to unconditionally set the icon
and be more strict about when we return early.

This fixes the case where setting "transparent" as the icon color
wouldn't result in the original image's colors being used, but
would instead result in the style's default icon color:

    Button {
        text: "Original icon color"
        icon.source: "heart.svg"
        icon.color: "transparent"
    }

    Button {
        text: "Original icon color (action)"
        action: Action {
            icon.source: "heart.svg"
            icon.color: "transparent"
        }
    }

Task-number: QTBUG-87459
Change-Id: Ic490e3b37a8174b8c034b84a1ad551a78088e44d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
The error was:

ld: open() failed, errno=21

Use similar CMake commands as e.g. the textrendering manual test.

Amends dd31db7.

Pick-to: 6.8 6.10
Change-Id: I7dac1567fd2e4269516f7d6c7db5812be3646e6d
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Otherwise they use the implicit size of the image.

Pick-to: 6.8 6.10
Change-Id: I29a57bd9339574e7107a5fe471f2d246d7f97b86
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Otherwise the text sits right against the icon, which is ugly.

Pick-to: 6.8 6.10
Change-Id: Id20e7633c43183d9209b90893095940f2a7ffc59
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Focus behavior was changed in 4d1753b
to give the buttonBox focus when a dialog is opened.
This will fundamentally conflict with user projects that manually set
the focus property.

Further discussion will be needed to arrive on a good solution for when
the focus property is manually set. For now, we can at least make sure
that the new focus behavior is limited to cases where the buttonBox
actually contains buttons (aka, not empty), with at least one of them
being enabled.

Fixes: QTBUG-141998
Change-Id: I704e6a707f5b579e5f4de7b6197abc2fc5dfdf3e
Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
When sweeping chunks, we might end up allocating additional chunks in a
custom destroy handler. This could cause the insertion of a new chunk
into the chunk vetcor, in the worst case invalidating the iterators (in
the slightly less worse case, we still have a chunk on which we don't
call sweep, leading to meta-data corruption later on).

Note that while the number of chunks can grow, it can't decrease.
Therefore, we can fix the problem by replacing the iterator based
partition with a size based one, which has additional checks in case the
size has changed during the iteration.
As a small optimization, wer run the loops without always checking for a
size change first, and only afterwardts check for it (as allocating
destroy handler aren't that common). Only afterwards we check if the
size has changed, and rerun the loop on the remaining vector.

Pick-to: 6.10 6.8 6.5
Initial-patch-by: Rafal Chomentowski <rafal.chomentowski@ge.com>
Fixes: QTBUG-141963
Change-Id: If9429a4a9030ec64952426ac35c38d3ae250e18d
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
The event replay debug client can either replay the input events from a
.qtd trace recorded using qmlprofiler, or it can accept individual
events given as instances of QQmlProfilerEvent.

Given the client we can test the service.

Fixes: QTBUG-141569
Change-Id: I2f20a84fc35bdadec51f15bb5656becdb2343f3e
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
We can't drop the respective compilation units without re-opening
QTBUG-128638 and QTBUG-128782. However, we can empty them out and force
them to be re-evaluated. Since you can store arbitrary data in those
libraries, this is important for a proper clearing of the component
cache. You may hold on to a QObject that in turn holds on to other
compilation units.

Change-Id: Ie6bd3878c0d45086a7efade76ad5696bf8428acb
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
std::move some strings into place, check condition only once, use
constFind() and constEnd() where applicable.

Coverity-Id: 897291
Change-Id: Icad3a49bc1137bc42de14f064cac111134993a2d
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Change-Id: Ibbc9cf3322f14eeb2ce17fd53238da393477cca6
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
This commit slightly improves the topic. Now, the snippets on this page
not only display "bad code" but do show how to do things properly. The
formatting was also improved a bit.

Task-number: QTBUG-141543
Pick-to: 6.10
Change-Id: Idc7a2bd8a4a86c96d9490c43d1b3dcf725b5581f
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This clarifies where we actually want to return a referenced object and
where we only hold a temporary reference to prevent it from getting
deleted.

Task-number: QTBUG-141963
Change-Id: Ied505d798fe9195b4296fa09b719efb17cbd1ea5
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Avoid polluting the global namespace with these generic names.

Pick-to: 6.10
Change-Id: I9126bea529789795323f1d7696f9c5490036e862
Reviewed-by: Hatem ElKharashy <hatem.elkharashy@qt.io>
Task-number: QTBUG-137318
Pick-to: 6.10
Change-Id: I3d5d9c35b214bc1c9878c7b81df32ceed1ac16fc
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
The second two arguments are width and height, not bottom-right
coordinates. So after shifting the rectangle left and upwards, we need
to add twice the margin to width and height, to have the same margin all
the way around. Amends 8115731

Change-Id: I83797ffd460ee47599170090aefcda544c3e4483
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
We shouldn't poke into the internals of the model item like this and we
should properly destroy the object including its context and attachment
rather than leaving those around.

Task-number: QTBUG-141963
Change-Id: Iddc835bbf8176b1a251f72f59d961f13308fc20a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
This is a purely mechanical change. It adds accessor methods for the
various members and makes the members private. Where necessary some code
is reordered and some members are cached in locals.

Task-number: QTBUG-141963
Change-Id: Ibc02764c33865896d146aff0950252cfee6d0732
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
It's modelData. Calling it "object" was rather confusing since the base
class also has an "m_object" member which is however not the modelData
but rather the delegate.

Task-number: QTBUG-141963
Change-Id: Ib26f4549cd284654d3276b0b81d354e3c7d4c65a
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Coverity complained that the get<>() calls can throw an exception that
percolates all the way to main().

There are several errors that combine to generate this warning, not
all of them in our code. E.g., Coverity should really not have a
problem understanding that get<> won't throw if we checked for
holds_alternative before. The qHash() function ought to have been
marked as noexcept (qHash() mustn't throw; QHash isn't really prepared
for that), std::visit() ought to have been used, though I appreciate
the verbosity that would generate.

So first try whether using get_if() shuts Coverity up. Incidentally,
this makes the code DRY, improving readability.

Amends d226e24.

Pick-to: 6.10 6.8 6.5
Coverity-Id: 895832
Change-Id: I0ed444cf96d3bfd3792351b66901af58d8180a76
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
In turn inline the isEmpty() method and make the clear() method purely
virtual. Also, use qsizetype for the number of events and event types.

Change-Id: I701aa27441489af28407cbae9123557a48a3a34e
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.