Important: Please read the Qt Code of Conduct -

Best way to remove dynamic qml object from a listmodel

  • I have self destroying qml objects in a list model.
    When they are destroyd I want to remove then from the listmodel, but I dont know their index. So to find the index I'm setting a flag to false when they are about to be destroyed, then I iterate the list to find the object index. It works, but it looks ugly and hacky, is there a better way to find the object list index from inside the object ?

    This is what I did:

    ListModel {
            id: activeEnemiesList
        Component.onCompleted: {
            var enemy2count = 55
            for (i = 0; i < enemy2count;i++) {
                var enemy2 = lib.createItem("Enemy02.qml", parent) //dynamic creation

    Enemy02.qml :

    Item {
        id: enemy02
        property bool timerRunning: y > spaceLimitYmin && y < spaceLimitYmax
        property bool alive: true
        onTimerRunningChanged: {
            if (timerRunning) {  // add object to the list
                activeEnemiesList.append({"obj": enemy02})
                console.log("added enemy to the list, size is "+activeEnemiesList.count)
            } else { //remove object from the list and destroy it
                alive = false
                for(var i = 0; i < activeEnemiesList.count; i++) {
                    if (activeEnemiesList.get(i).obj.alive === false) {

  • Qt Champions 2017

    How are you displaying the individual objects. It must be through delegate. You can use 'index' property inside the delegate which gives you the information required.

  • Thats the problem, I'm not using any delegates so no index available. They are just dynamic qml rectangles that self display randomly on screen, when created. I'm only using a Listmodel to keep track of them to do stuff like collision detection (I could have also used a javascript array instead of listmodel).

Log in to reply