- 
    
Bug
 - 
    Resolution: Done
 - 
    
P1: Critical
 - 
    5.15.8, 6.4
 
- 
        6901eacff4 (qt/qtdeclarative/dev) 6901eacff4 (qt/tqtc-qtdeclarative/dev) a02496b639 (qt/qtdeclarative/6.3) ce8db06725 (qt/qtdeclarative/6.2) ce8db06725 (qt/tqtc-qtdeclarative/6.2) a02496b639 (qt/tqtc-qtdeclarative/6.3) ce8db06725 (qt/qtdeclarative/6.2.4)
 
This model is registered as a QML singleton:
class SingletonModel : public QStringListModel { Q_OBJECT public: SingletonModel(QObject* parent) : QStringListModel(parent) { } }; // ... qmlRegisterSingletonType<SingletonModel>(uri, 1, 0, "SingletonModel", [](QQmlEngine* engine, QJSEngine*) -> QObject* { return new SingletonModel; });
If ListView is destroyed with that object as the model, the singleton breaks and will crash on next access:
        Component {
            id: view
            ListView {
                model: SingletonModel
            }
        }
        function test_singletonModelCrash() {
            SingletonModel.objectName = "model"
            var o = view.createObject(root)
            // no crash: o.model = null
            o.destroy()
            compare(SingletonModel.objectName, "model")
            wait(1)
            // crash
            compare(SingletonModel.objectName, "model")
        }
QV4::QQmlTypeWrapper::virtualResolveLookupGetter (object=<optimized out>, engine=<optimized out>, lookup=<optimized out>) at qml/qqmltypewrapper.cpp:462 462 lookup->qobjectLookup.ic = val->objectValue()->internalClass();
The SingletonModel instance is not destroyed. Setting a QObject parent or CppOwnership prevents the bug, but from what I understand the code above is valid and the engine should have "ownership".
- mentioned in
 - 
                    
Page Loading...
 
| For Gerrit Dashboard: QTBUG-100260 | ||||||
|---|---|---|---|---|---|---|
| # | Subject | Branch | Project | Status | CR | V | 
| 393053,2 | QQmlData: tag singletons | dev | qt/qtdeclarative | Status: DEFERRED | +1 | 0 | 
| 393054,6 | QQmlAdaptorModel: Do not use reparenting for lifetime managemment | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 | 
| 393686,3 | QQmlAdaptorModel: Do not use reparenting for lifetime managemment | 6.3 | qt/qtdeclarative | Status: MERGED | +2 | 0 | 
| 393700,3 | QQmlAdaptorModel: Do not use reparenting for lifetime managemment | 6.2 | qt/qtdeclarative | Status: MERGED | +2 | 0 | 
| 395053,4 | QQmlAdaptorModel: Do not use reparenting for lifetime managemment | tqtc/lts-5.15 | qt/tqtc-qtdeclarative | Status: MERGED | +2 | 0 |