Revision control
++ // Copyright (C) 2020 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ //! [0]
++ class MySingleton : public QObject {
++ Q_OBJECT
++
++ // Register as default constructed singleton.
++ QML_ELEMENT
++ QML_SINGLETON
++
++ static int typeId;
++ // ...
++ };
++ //! [0]
++
++ /*
++ //! [1]
++ MySingleton::typeId = qmlTypeId(...);
++ //! [1]
++ */
++
++ void wrapper2() {
++ //! [2]
++ // Retrieve as QObject*
++ QQmlEngine engine;
++ MySingleton* instance = engine.singletonInstance<MySingleton*>(MySingleton::typeId);
++ //! [2]
++ }
++
++ /*
++ //! [3]
++ // Register with QJSValue callback
++ int typeId = qmlRegisterSingletonType(...);
++ //! [3]
++ */
++
++ void wrapper4(int typeId) {
++ //! [4]
++ // Retrieve as QJSValue
++ QQmlEngine engine;
++ QJSValue instance = engine.singletonInstance<QJSValue>(typeId);
++ //! [4]
++ }
++
++ void wrapper5() {
++ //! [5]
++ QQmlEngine engine;
++ MySingleton *singleton = engine.singletonInstance<MySingleton *>("mymodule", "MySingleton");
++ //! [5]
++ }
++
++ class BackendService {};
++
++ //! [6]
++ class CppSingleton: public QObject {
++ Q_OBJECT
++ QML_ELEMENT
++ QML_SINGLETON
++ QML_UNCREATABLE("Provided via QQmlEngine::setExternalSingletonInstance")
++ // Q_PROPERTY(...)
++ public:
++ explicit CppSingleton(BackendService *service); // constructor taking a reference to something MySingleton needs
++ // members, Q_INVOKABLE functions, etc.
++ };
++ //! [6]
++
++ void wrapper6() {
++ //! [7]
++ // create and setup the backend service
++ BackendService service;
++
++ // create your singleton instance
++ CppSingleton singleton(&service);
++ QQmlApplicationEngine engine;
++ engine.setExternalSingletonInstance("com.company.myApp", "MySingleton", &singleton);
++ engine.loadFromModule("com.company.myApp", "Main");
++ //! [7]
++ }