Hi Stefan,
I'd like to be able to replace that singleton instance over the course of the application's workflow, but I couldn't find any indication in the docs for whether that's allowed, or whether that might lead to undefined behaviour.
There is QQmlEngine::clearSingletons(), but it's not for the faint of heart:
This function drops all singleton instances, deleting any QObjects owned by the engine among them. This is useful to make sure that no QML-created objects are left before calling clearComponentCache(). QML properties holding QObject-based singleton instances become null if the engine owns the singleton or retain their value if the engine doesn't own it. The singletons are not automatically re-created by accessing existing QML-created objects. Only when new components are instantiated, the singletons are re-created. \sa clearComponentCache()
After this, the engine will have "forgotten" your C++-owned singleton, and you can delete it, making it null in all properties that still hold it. Then, if you instantiate a component that uses the singleton, it will be re-created from your create() function.
If you just delete the singleton without clearSingletons() you've created a null singleton. There is code that should deal with that case, but I don't think it's exercised very often.
best regards, Ulf _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest