QML/C++——C++ 指针所有权问题

c++注册到QML中的类,会自动将所有权转移到QML端,如此一来,QML会主动释放该类,与C++端产生冲突

QQmlEngine::setObjectOwnership(MyObject, QQmlEngine::CppOwnership);

// 某些情况下,在创建类的时候,无法将所属权转移到c++中,可使用上述代码。
示例
std::share_ptr<Son> m_son = std::make_shared<Son>(this);
在父类创建Son类的时候,加上了this,但是所有权还是属于QML端。可在父类返回Son的指针前加上上面的代码
Son *Parent::getSon()
{
    QQmlEngine::setObjectOwnership(MyObject, QQmlEngine::CppOwnership);
    return m_son.get();
}


验证所有权

auto ownership = QQmlEngine::objectOwnership(obj);
qDebug() << "Ownership:" << (ownership == QQmlEngine::CppOwnership ? "C++" : "QML");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值