我认为这也应该适用于插件,而不仅仅适用于注册类型。我不能尝试它,现在,当我尝试过了那天晚些时候我会删除此行:
每个QML辛格尔顿,C++定义需要有签名的静态方法:
static QObject* someName(QQmlEngine *, QJSEngine *);
返回一个指向这个类的单个实例的指针。
我通常会认为你不需要QQmlEngine
或QJSEngine
,使其工作,所以你可以很容易地通过添加第二个静态方法实现完整的单例模式:
static QObject* instance();
返回一模一样。 你可能会有一个
static MySingletonObject* instance();
所以你不需要后来施放。
现在您只需导入您的类,并且您将通过调用此静态方法访问同一个实例。
如果以上不工作,你可能会做它的哈克的方式:
您也可以使用您的根节点,并设置一个属性:
property QtObject mySingleton: MySingleton
然后你可以使用findChild
来获取您的根节点并阅读相同的属性。为了能够做到这一点,你可能需要先访问单例的东西,否则实例可能会丢失。
property Item singl: MySingleton
Component.onCompleted: {
// MySingleton.color = 'green' // If this line is commented out, it will fail for me for a QML-defined Singleton at least.
singl.color = 'red'
}
该解决方案适用于我QML定义qmldir注册的单身人士,以及C++ - 定义和qmlRegisterSingleton(...)
- 注册单身。使用QML定义的单例,您可能需要访问单例,然后才能分配它。我不知道这个的内部原因。
您的方法是合乎逻辑的,但我无法解析GCC运行时错误“未定义符号_ZNK9MyQmlType10metaObjectEv”。因此,除非插件动态库已经被加载,否则插件加载似乎没有办法。 'qmlRegister *'函数不能注册类型,而不实现可访问的类型类型。 – AlexanderVX
你采取哪种方法?你能创建一个MCVE吗? – derM
我决定使用https://stackoverflow.com/questions/28112038/qml-plugin-load-from-c来解决这个我并不真正想要的解决方法,但至少这是可行的。 – AlexanderVX