【问题标题】:Can I retain ownership of QObjects passed to QJSEngine?我可以保留传递给 QJSEngine 的 QObject 的所有权吗?
【发布时间】:2020-07-24 21:08:48
【问题描述】:

我正在使用 QJSEngine 并将一些对象与 engine.globalObject().setProperty(name, engine.newQObject(obj)); 绑定

问题是 QJSEngine 析构函数正在调用这些对象的析构函数,但我希望它们比 QJSEngine 对象更长寿。

即使我从 globalObject() 中删除该属性也会发生这种情况。

【问题讨论】:

    标签: qt qml qt5 qjsengine


    【解决方案1】:

    看起来使用 QQmlEngine 而不是 QJSEngine 可以访问setObjectOwnership,从而可以解决该问题。

    https://doc.qt.io/qt-5/qqmlengine.html#setObjectOwnership

    根据我从文档中了解到的情况,从 Q_INVOKABLE 方法返回的对象仍然是一个问题,我不确定如何保留其所有权。所以如果有人有一些想法,我想知道他们。

    【讨论】:

    • 这对于从 Q_INVOKABLEs 返回的对象来说实际上不是问题,如果你用CppOwnership 调用setObjectOwnership 或者如果它们有一个父 QObject,QML 引擎将不会取得它们的所有权。跨度>
    • QQmlEngine::setObjectOwnership(QObject *object, QQmlEngine::ObjectOwnership ownership) 是静态的。因此,它也应该与 QJSEngine 对象一起使用
    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多