По умолчанию объекты, созданные в коде С++ и переданные в QML через Q_INVOKABLE методы или слоты передаются во владение Javascript. То есть если в QML передается указатель на объект, созданный в коде С++ динамически посредством вызова оператора new(), сборщик мусора Javascript удалит его по своему усмотрению: если на него не будет ссылок в Javascript, не будет родительского объекта (QObject::parent() будет пуст), или будет вызван деструктор соответствущего QQmlEngine. Это поведение можно изменить с помощью вызова статического метода:
Таким образом, если выставить только что созданному объекту значение QQmlEngine::CppOwnership, владение останется на стороне кода С++, и сборщик мусора его не тронет.
void QQmlEngine::setObjectOwnership(QObject * object, ObjectOwnership ownership)
Комментариев нет :
Отправить комментарий