Hi Николай Шатохин, I saw on the list, that you got this working. But there were a bunch of things missing in the discussion. I have just done the same thing you are trying in one of our 4.8.5 based projects.
Some of this has been said, other parts haven't. I hope this is a complete description that should help you understand the topic. Den 02-10-2013 16:12, Николай Шатохин skrev: > I registered as QML Type class Ship inherited from QObject that have fields: > > Q_PROPERTY(Hull hull READ hull) > Q_PROPERTY(Reactor reactor READ reactor) > Q_PROPERTY(Shields shields READ shields) > > (all field classes inherited from QObject too) > > But in ship class I'm using this fields as pointers (Hull * hull). So, > how to use correctly Q_Properties in this case? (I need call methods > from this fields and catch signals from them in QML) > > Can I use something like this Q_PROPERTY(Hull hull READ hull)? As already pointed out, you have to do pointers for this: class Hull : public QObject { ... }; class Ship : public QObject { Q_OBJECT Q_PROPERTY(Hull* hull READ hull CONSTANT) Hull* m_hull; public: Ship() : m_hull(new Hull(this)) {} Hull* hull() { return m_hull; } }; The Reactor and Shields work exactly the same way. For this to work, you have to declare the Hull, Reactor and Shields types to the QML engine. Something like this: qmlRegisterUncreatableType<Hull>("MyGame", 1, 0, "Hull", "Can't be created."); qmlRegisterType<Ship>("MyGame", 1, 0, "Ship"); > And then in QML: > > Ship > { > id: ship > Hull > { > id: hull_indicator > backend: ship.hull > } > > onDamage: > { > ship.hull.reduce(damage); > } > } You don't need the extra Hull {} declaration here. There is already a Hull object in your ship, the "ship.hull" you use in onDamage. If this is about visualization, you should have a different set of classes, ShipView and HullView or something, that shows this: import MyGame 1.0 Item { id: completeShip ShipView { anchors.fill: parent ship: internal.ship } HullView { anchors.fill: parent hull: internal.ship.hull } QtObject { id: internal Ship { id: ship } } } This might seem complicated at first, but you achieve one thing I find extremely important in QML coding: Keep your state in C++ and totally separated from the visualization of it. This is a standard MVC pattern, actually. The Ship is the model, the completeShip is the controller and ShipView/HullView is the visualization. But somehow this isn't always followed when people code QML. I hope this helps. Bo. -- Bo Thorsen, European Qt Manager, ICS Integrated Computer Solutions. Delivering World-Class Applications http://ics.com/services _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest