Dynamic lifecycle of Qt Quick objects



  • Hi
    I understand that you can permanently create a QML object as a sub-element by describing it inside another object, or by describing it in a qml file and creating it as a property of the parent object.

    You can also dynamically create objects from a file or from a string in javascript as described here: http://doc.qt.nokia.com/latest/qdeclarativedynamicobjects.html

    There is one more way to create a dynamic object - you can do the following:
    @pageStack.push(Qt.resolvedUrl("pages/HomePage.qml")@

    My question is this, if you declare a page using Qt.resolvedUrl, what is its lifetime/who is its owner? Can it be deleted - for example if you pop it off the pagestack is it automatically deleted?



  • Hi,

    I think the owner of new pages is PageStack that create them. A page is destroyed when it is not longer needed( i.e. it is removed from stack by pop(), remove() or clear() )



  • Thanks. But the implication is that if you call the push multiple times over the life of your app you'll get multiple instances - ie a memory leak. Is there a way to destroy an object created in this way? ie what happens if you pop the instance? Who owns it then?



  • Experimentation shows that when you pop the page it is destroyed, as you would hope.



  • The concept of interface is based on stack. When you start an app you got only a start page. When you enter subpage it is pushed in stack and when you go back it is poped from stack and memory is released. And when you enter in subpage again, new instance is created( old one has been removed by pop() ). So most of time you'll got only a few pages in stack.



  • One thing to watch with this is that there is a wrapping component around the page, and this doesn't seem to be destroyed. You will get one of these for each (unique?) page that has been pushed onto the stack.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.