November 30, 2011

hamishwillee hamishwillee
Lab Rat
17 posts

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:

  1. 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?

5 replies

November 30, 2011

task_struct task_struct
Ant Farmer
353 posts

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() )

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

November 30, 2011

hamishwillee hamishwillee
Lab Rat
17 posts

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?

November 30, 2011

hamishwillee hamishwillee
Lab Rat
17 posts

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

November 30, 2011

task_struct task_struct
Ant Farmer
353 posts

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.

 Signature 

“Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.”
- Linus Torvalds

November 30, 2011

SteveKing SteveKing
Lab Rat
105 posts

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.

 
  ‹‹ Error in QDeclarativeView      Handle "byte" and "unsigned int" in QML ››

You must log in to post a reply. Not a member yet? Register here!