2

单个 C++/Qt5 应用程序拥有多个独立的 JavaScript 引擎实例是否正常?在我的应用程序中,我有几个 QObject 继承的对象,它们充当独立的数据处理单元。在它们中的每一个中,我都希望能够启动 JS 脚本,并且我希望这些脚本的上下文在这些单元之间是独立的。最简单的想法是让每个单元都有自己的 QJSEngine 实例。一个简单的测试表明,如果我在同一个应用程序中创建两个引擎并在其中一个中设置自定义全局属性,则第二个引擎不知道该属性,这正是我想要的。但是仍然不明显的是,没有一些全局状态属性对所有 QJSEngine 实例都是通用的。官方 Qt 文档中似乎从未提及多实例的问题。

4

1 回答 1

1

Qt 文档通常是明确的,因此如果禁止创建 2 QJSEngine,它将被写入文档中,并且您将在运行时收到警告或断言失败。

例如,如果您尝试创建 2 个QCoreApplication实例,最终会导致崩溃并出现以下错误:

ASSERT failure in QCoreApplication: "there should be only one application object", file kernel\qcoreapplication.cpp, line 792

由于没有这样的通知/警告/断言QJSEngine,因此创建多个实例应该是完全安全的。

如果您想要另一个允许这样做的提示,您可以查看QQuickWidget. 如果需要,此小部件将创建自己的QQmlEngine(即QJSEngine),而不管是否存在任何其他QJSEngineQQmlEngine实例。

于 2019-06-28T09:52:30.720 回答