一个C++/Qt5应用程序拥有多个独立的JavaScript引擎实例是正常的吗?在我的应用程序中,我有几个QObject继承的对象作为独立的数据处理单元。在每个脚本中,我都希望能够启动JS脚本,并且我希望这些脚本的上下文能够独立于这些单元。最简单的想法是让每个单元都有自己的QJSEngine实例。一个简单的测试表明,如果我在同一个应用程序中创建了两个引擎,并在其中一个程序中设置了一个自定义全局属性,那么第二个引擎不知道这个属性,这正是我想要的。但是,并不明显的是,QJSEngine的所有实例都没有一些通用的全局状态属性。在官方的Qt文档中,似乎从未提到过多个实例的问题。这是否足以得出结论:拥有多个实例不会造成任何问题?
发布于 2019-06-28 09:52:30
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),而不管是否存在任何其他QJSEngine或QQmlEngine实例。
https://stackoverflow.com/questions/56787599
复制相似问题