gpt4 book ai didi

c++ - 将 QObject 类公开到 qml 时,在 Qt 中管理内存的正确方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:01 27 4
gpt4 key购买 nike

我使用 C++ 来编写我的大部分程序逻辑。我喜欢将 C++ 类公开到 QML 中,以便 QML 可以使用 JS 来完成许多复杂的工作。然而,问题来了:

如果 C++ 函数返回一个 QObject*

Q_INVOKABLE QObject* parseJson(const QString& someArguments)
{
return new SomeClassExtendsQObject(someArguments);
}

然后分配给 JS 变量并使用

var result = exposingCppObj.parseJson("I'm Arguments");
result.someMemberFunction(...);
.....

如果我用

delete result

在 QML JS 中,实例真的像在 C++ 中那样被释放了吗?

最佳答案

用 C++ 创建但可从 QML 访问的对象可以有两个 ownership states :QQmlEngine::CppOwnershipQQmlEngine::JavaScriptOwnership。您很少需要设置此状态,因为 Qt 通常可以计算出合适的状态。在您的示例中,由于对象是从 QML 调用创建的,因此它会自动分配 QQmlEngine::JavaScriptOwnership

当一个对象被分配QQmlEngine::JavaScriptOwnership 时,JS 垃圾收集器将在必要时销毁它;很少需要明确销毁它。

最后一件事,如果你想销毁 QML 中的对象,请使用 destroy() . JS delete关键字用于从对象中删除属性的值和属性本身。

关于c++ - 将 QObject 类公开到 qml 时,在 Qt 中管理内存的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com