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");