【发布时间】:2018-06-22 23:01:21
【问题描述】:
我有一个类SingletonBaseClass,它在 C++ 中定义,后来在 QML 中扩展。在 qmldir 文件中,它被标记为 Singleton:
// qmldir file
singleton SingletonClass 1.0 SingletonClass.qml
// SingletonClass.qml
import QtQml 2.0
pragma Singleton
SingletonBaseClass {
// ...
}
这是基类:
class SingletonBaseClass : public QObject
{
Q_OBJECT
public:
SingletonBaseClass(QObject* parent = nullptr) {}
// Get the owner engine
Q_INVOKABLE void someMethodCalledFromQml()
{
QQmlEngine* ownerEngine = ?
}
// Get the single instance of the given engine
static SingletonBaseClass* instance(QQmlEngine* engine)
{
SingletonBaseClass* instance = ?
return instance;
}
};
- 如何在 SingletonBaseClass 中检索
QQmlEngine实例? - 如何从静态函数中获取指向我的单例实例的指针?
注意:我的应用程序中有多个 QML 引擎实例。
[更新]:我对建议的解决方法不满意,因此我最终为 1. 和QQmlEngine::singletonInstance() 贡献了 this patch 为 2。这两个更改都将在 Qt 5.12 中可用。
【问题讨论】:
-
你想用 C++ 还是 QML 获得 QQmlEngine?
-
如果你使用
qmlRegisterSingletonType注册你的单例,那么指向QQmlEngine的指针就是callback function参数之一 -
我明确写过单例是在 QML 中实例化的,因此没有单例提供者回调。
标签: qt qml qqmlengine