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

Reply via email to