首页 > 解决方案 > 您如何注册相互依赖的 Qt QML Singleton?

问题描述

我正在使用一些 C++ 和一些 JavaScript/QML 构建一个 Qt 应用程序。

我有三个全局单例,A、B 和 C,我想向 QML 引擎注册它们。我可以使用这种方法独立注册每个对象。

A、B 和 C 需要有权访问传递给单例提供程序的 QMLEngine。

现在假设 B 和 C 依赖于 A;特别是,需要将 A 的全局实例传递给 B 和 C 的构造函数。如何实例化和注册这些类型?

标签: c++qtqml

解决方案


作为一个被那个非常糟糕的人刺痛的人,我强烈建议不要去那里,在你还可以的时候回头。

Qt 有一个相互引用单例的错误,不幸的是,它只是部分解决了,而且看起来它不会很快得到解决。

该错误导致 QML 引擎加载偶尔(10-20% 的时间)静默失败,没有错误,没有警告,没有应用程序窗口......什么都没有。只是一个卡住的死进程。

如果可能,将 A、B 和 C 实现为一个单例的子对象。然后,您仍然可以将它们单独公开为单例的属性。


推荐阅读