I have a QQuickItem
fetched from C++ side like this.
QQuickItem * my_item = qmlEngine->rootObjects()[0]->findChild<QQuickItem*>("ItemObjectName");
my_item
is valid & has all the properties set on to it.
Scenario
I have 2 windows which need this QQuickItem
to be drawn on alterantively. I want to render this my_item
to a different window. This works perfectly fine as long as I set the Parent of the my_item
to the other window
// the_other_window is a QQuickWindow
QQuickWindow * the_other_window;
// here I set parent
my_item->setParentItem(the_other_window->contentItem());
This requires me to do setParentItem
again back to my_item
's original window otherwise it goes invisible on the original window. This is working but gives me unnecessary dependency. Instead I am trying to create a copy of the QQuickItem
& do a setParentItem
on that. By copying like this:
QQuickItem * item_copy = new QQuickItem(my_item);
Question:
I want to make item_copy
as exactly the same as my_item
. I learnt that QQuickItem
is not copyable. So, want to set all properties of my_item
into item_copy
. Thus recreating my_item
from scratch. How can I do this? What properties should I copy primarily? width, height, x, y & what else?
Is there a method to copy all the valid properties into this new one without copying each one by one?
To copy all the properties you must use the
metaobject()
, through this we obtain the properties and we can copy them as shown below. Note: not all properties can be written, for this we check with the methodisWritable()
:Example:
Output: