Hi, Is is a known bug that items that are created dynamically do not handle properties properly? I create lots of items using Qt.createObject() as they can not be defined at design time. Initially I used a Repeater to set up the items and that worked well, the item properties were fully bound to the Q_PROPERTY properties of the C++ objects they represented. However, you can not dynamically destroy items created using a Repeater (or so the docs have me believe), so something else was needed.
So, now I set up my game pieces like this: import Qt 4.7 Item { function createUnits (component) { if ( component.status == Component.Ready ) { // get all units, this is a C++ list of Unit* var unit_list = scenario.units.units; for ( var index = 0; index < unit_list.length; index++ ) { // the c++ unit, a Unit* var unit = unit_list[index] // create a new item with the root Item as parent, see // the "id" property var item = component.createObject( units ); if (item == null) { console.log( "Units.createUnits: failed to create unit" ); } else { // bind all properties to the C++ object item.x = unit.x * 48 + ( unit.y % 2 ) * 24 item.y = unit.y * 36 item.source = unit.icon item.unit_id = unit.id } } } else if (component.status == Component.Error) { // ugh } } function loadComponent () { // load the component var component = Qt.createComponent("Unit.qml"); // create the real items createUnits( component ); } Component.onCompleted: loadComponent(); id: units } The Unit.qml file basically contains an Image {} with a few behaviours and a mouse area and has worked fine. This setup works so far that the Unit items get created and the correct initial properties are set. They show up at the right place and with the right image loaded. It all goes wrong when the C++ object changes, say, its position. The dynamically created items have their x and y properties bound to these C++ properties: Q_PROPERTY( int x READ getX NOTIFY positionChanged ); Q_PROPERTY( int y READ getY NOTIFY positionChanged ); This worked fine with the Repeater created items. The Unit items nicely followed the C++ object's properties. However, the items created with the above code will totally ignore any property changes. No amount of emitting positionChanged will move the dynamic items. So, my question is now, is this: 1. a bug in my code and I'm somehow not doing it right (lets hope for that) 2. properties in dynamic objects should not work (argh!) 3. properties in dynamic objects should work but are broken 4. a combination of the above 5. none of the above As it is I can't get dynamic creation & destruction and properties to work at the same time and that more or less makes my whole silly game impossible to do. Destroying items by moving them outside the game area, hiding them etc is just a very ugly kludge and I'd like to avoid resorting to stuff like that until nothing else works. [Of course, one way would be to dynamically create a QML file with all the needed Unit items when I load the game data on the C++ side. This file would be created before the QML side is even initialized. But this would be an epically ugly kludge that should fall into the 12th layer of hell.] Best regards, Jan Ekholm -- He says gods like to see an atheist around. Gives them something to aim at. -- Terry Pratchett, Small Gods _______________________________________________ Qt-qml mailing list Qt-qml@trolltech.com http://lists.trolltech.com/mailman/listinfo/qt-qml