zzy*_*zzy 4 c++ qt qml qtquick2
我正在使用C++来编写我的大部分程序逻辑.我喜欢将C++类暴露给QML,以便QML可以使用JS来完成许多复杂的工作.但是,出现了一个问题:
如果C++函数返回一个 QObject*
Q_INVOKABLE QObject* parseJson(const QString& someArguments)
{
return new SomeClassExtendsQObject(someArguments);
}
Run Code Online (Sandbox Code Playgroud)
然后将其分配给JS变量并使用
var result = exposingCppObj.parseJson("I'm Arguments");
result.someMemberFunction(...);
.....
Run Code Online (Sandbox Code Playgroud)
如果我使用
delete result
Run Code Online (Sandbox Code Playgroud)
在QML JS中,实例是否真的像在C++中一样被释放?
用C++创建但可从QML访问的对象可以有两种所有权状态:
QQmlEngine::CppOwnership和QQmlEngine::JavaScriptOwnership.你很少需要设置这个状态,因为Qt通常可以找到合适的状态.在您的示例中,由于对象是从QML调用创建的,因此会自动分配该对象QQmlEngine::JavaScriptOwnership.
分配对象时QQmlEngine::JavaScriptOwnership,JS垃圾收集器会在必要时销毁它; 很少需要明确地销毁它.
最后一件事,如果你想在QML中销毁一个对象,请使用destroy().JS delete关键字用于从对象中删除属性的值和属性本身.
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |