Important: Please read the Qt Code of Conduct -

Delete QML Objects from C++

  • Hello i know how to create and update property's on qml from c++. But how do i delete/destroy the object from the qmlApplicationEngine.

        QQmlApplicationEngine *qmlApplicationEngine = new QQmlApplicationEngine();
        QQmlComponent component(qmlApplicationEngine, QUrl(QStringLiteral("qrc:/Video.qml")));
        QQuickItem *qQuickItem = qobject_cast<QQuickItem*>(component.create());
        QQmlEngine::setObjectOwnership(qQuickItem, QQmlEngine::CppOwnership);

  • @Jens-van-koolwijk Hi, welcome to the Qt forum! You use QQmlEngine::CppOwnership, so the QML engine knows that it's your responsibility to delete the object. Just call delete qQuickItem; or qQuickItem->deleteLater();.

  • @Wieland Hello , thank you for the quick response. Perhaps I have not sufficiently explained my question. If for example, I 've created a video player in the QML file that I play . If I then remove the object while it is playing the audio stays but the visual gets black. If I stop the video first and then remove it seems that not everything cleared according to the QML debugger . what is the correct way . Do i need to make Deconstructor function in QML.

  • Hmm.. does this happen when you use deleteLater()? Because it shouldn't and if so then it's a bug.

  • Is creating the object from QML instead of C++ an option? As noted, deleting the C++ object while the QML engine is running may have unexpected results.

    If the lifetime of the object needs to be shorter than the lifetime of the parent item, covers several options.

  • @jeremy_k
    Thank you.I will try it out

Log in to reply