What if I need to show the same QML object in two different places? How to do this? How to create new QML object without recreating it in C++?
2013/9/30 Николай Шатохин <[email protected]> > 0_o. I didn't know that all objects in QML are global. Thank you very much. > > > 2013/9/30 <[email protected]> > > Omg declare global engine object in main qml file and that's all >> >> 30.09.13 13:19 Николай Шатохин написал(а): >> I'm using qmlRegisterType now. I have problems, because two QML objects >> in different QML files it is two different objects in C++. I registered as >> type class that have static object of Engine, but now I have butthurt with >> it (I need retranslate all signals, getters and setters) >> >> >> 2013/9/30 Michael Zanetti <[email protected]> >> >>> On Monday 30 September 2013 12:05:03 Николай Шатохин wrote: >>> > Can I set only one object as context property that contains other >>> objects >>> > (and this objects contain objects too) and get this deep objects in >>> QML? >>> > >>> > For i.e. I have object of class Engine that has object of class Game, >>> Game >>> > contains object of Ship and Ship contains object of Reactor. So, I set >>> > object of Engine as context property and in QML write: >>> > >>> > engine.game.ship.reactor >>> > >>> > Can I use it? >>> >>> >>> Yes, given that "game" is a Q_PROPERTY() of "enigne", "ship" is a >>> Q_PROPERTY() >>> of "game" etc... >>> >>> Still, I recommend to register the type of the Engine instead of setting >>> it as >>> a context property. >>> >>> It's really just using qmlRegisterType() instead of >>> setContextProperty(). It's >>> not more or more complex code, but gives you better ways of structuring >>> your >>> QML code. >>> >>> > >>> > >>> > 2013/9/30 Николай Шатохин <[email protected]> >>> > >>> > > I've already found this solution: >>> > > >>> http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-contextpropert >>> > > ies.html It helps. Thanks. >>> > > >>> > > >>> > > 2013/9/30 Michael Zanetti <[email protected]> >>> > > >>> > >> On Sunday 29 September 2013 13:45:01 Vladimir M. wrote: >>> > >> > Sounds like a "context property" use case (you plain set a >>> QObject as a >>> > >> > context property for a view's root scope, w/o even registering the >>> > >> >>> > >> object's >>> > >> >>> > >> > type, and all its properties and invokables become available). >>> > >> >>> > >> I don't recommend using context properties. While they are useful >>> for >>> > >> some >>> > >> cases, this one doesn't seem to be one of those. Using too many >>> global >>> > >> context >>> > >> properties can make the code very ugly to work with. >>> > >> >>> > >> You probably want to create something like this: >>> > >> >>> > >> class ViewController: public QObject >>> > >> { >>> > >> >>> > >> Q_PROPERTY(QList<MyClass> viewObjects READ viewObjects NOTIFY >>> > >> >>> > >> viewObjectsChanged) >>> > >> ... >>> > >> QList<MyClass> viewObjects() const { >>> > >> >>> > >> return objectList; >>> > >> >>> > >> } >>> > >> ... >>> > >> }; >>> > >> >>> > >> qmlRegisterType<ViewController>(uri, 0, 1, "ViewController"); >>> > >> >>> > >> Then in QML you can do something like this: >>> > >> >>> > >> ViewController { >>> > >> >>> > >> id: viewController >>> > >> >>> > >> } >>> > >> >>> > >> Repeater { >>> > >> >>> > >> model: viewController.viewObjects >>> > >> MyView { >>> > >> >>> > >> property var viewObject: viewController.viewObjects[index] >>> > >> >>> > >> } >>> > >> >>> > >> } >>> > >> >>> > >> >>> > >> Note that if you want your code to adjust more flexible (i.e. the >>> > >> viewObjects >>> > >> change a lot), consider using a QAbstractListModel (or some other >>> model) >>> > >> instead of a QList. >>> > >> >>> > >> Hope this helps, >>> > >> Michael >>> > >> >>> > >> > On Sun, Sep 29, 2013 at 6:38 AM, Николай Шатохин >>> > >> >>> > >> <[email protected]>wrote: >>> > >> > > Hello. >>> > >> > > >>> > >> > > When I create a class in C++, I can register it for QML and can >>> > >> > > create >>> > >> > > view for it. It's very convenient. But, if I need many objects >>> of the >>> > >> >>> > >> same >>> > >> >>> > >> > > type, and need to show few views on screen, I got problems. >>> > >> > > Is it possible to register QML type for object, not for class? >>> > >> > > If I change some object, I need to see only its view changed. >>> > >> > > >>> > >> > > Best regard, >>> > >> > > Nick >>> > >> > > >>> > >> > > -- >>> > >> > > Mailing list: https://launchpad.net/~ubuntu-phone >>> > >> > > Post to : [email protected] >>> > >> > > Unsubscribe : https://launchpad.net/~ubuntu-phone >>> > >> > > More help : https://help.launchpad.net/ListHelp >>> >>> >> >> >
-- Mailing list: https://launchpad.net/~ubuntu-phone Post to : [email protected] Unsubscribe : https://launchpad.net/~ubuntu-phone More help : https://help.launchpad.net/ListHelp

