Hm, yes, it helps. Thank you.
2013/10/2 Roman Shchekin <mrqt...@gmail.com> > You should register Game via qmlRegisterType too. > > Your Engine's "game" property used in binding and it has no NOTIFY signal. > I hope you know what is it. If no - you should learn basics of Qt first. > > Cheers, > Roman. > > > 2013/10/2 Николай Шатохин <n.shatok...@gmail.com> > >> I did it, but now I got: >> >> QMetaProperty::read: Unable to handle unregistered datatype 'Game*' for >> property 'Engine::game' >> >> QQmlExpression: Expression qrc:/Reactor.qml:7 depends on non-NOTIFYable >> properties: >> >> Engine::game >> >> On application startup (game is Q_PROPERY of Engine and has type Game *). >> >> >> 2013/10/2 Vladimir M. <mlvl...@gmail.com> >> >>> Just put the star in the property decl -- it's the stock way to do it, >>> and the decl w/o star will be deprecated probably soon, as far as I know. >>> Then, bind to the props in qml, and that's it! >>> 02 окт. 2013 г. 14:31 пользователь "Николай Шатохин" < >>> n.shatok...@gmail.com> написал: >>> >>> >>>> Ok, I registered as 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) >>>> >>>> >>>> >>>> 2013/9/30 Vladimir M. <mlvl...@gmail.com> >>>> >>>>> Sure, you can always wire as many objects as possible to smth existing >>>>> in a scene or set as a context property -- it's a simple Q_PROPERTY >>>>> assignment on the C++ side, with a pointer passed to the setter (and works >>>>> as soon as you declare the property on the QML side (or register and >>>>> instantiate a C++ implemented item)). >>>>> >>>>> After all, these are ordinary QObejcts passing pointers (to each >>>>> other) to each other :) >>>>> (plus some memory management -- automatic on the QML side, and QObject >>>>> parent-tree based on the C++ side) >>>>> >>>>> Vladimir >>>>> >>>>> >>>>> On Mon, Sep 30, 2013 at 6:24 PM, Николай Шатохин < >>>>> n.shatok...@gmail.com> wrote: >>>>> >>>>>> What if I will create property backend in QML type and then I will >>>>>> set this property in all QML objects to global object? So, theoretically >>>>>> this can solve my problem. >>>>>> >>>>>> >>>>>> 2013/9/30 Vladimir M. <mlvl...@gmail.com> >>>>>> >>>>>> Then, it looks like the standard way would be to have an instance of >>>>>>> the item embedded in each page in the stack. >>>>>>> >>>>>>> If this turns out to be too resource consuming, you may try to play >>>>>>> some tricks like removing it from all the pages and overlaying over the >>>>>>> whole stack (if the item will always be in the same place, and have the >>>>>>> same geometry, this will be rather simple, children order or z-value >>>>>>> will >>>>>>> allow it place it on top). >>>>>>> >>>>>>> If geometry is different for each page, this may get trickier >>>>>>> (ultimate solution may be some sort of a "placeholder item" having the >>>>>>> right place in each page, to which the item gets parented when the >>>>>>> placeholder becomes visible, with "fill" anchoring). >>>>>>> >>>>>>> On the other hand, if the item has to have it's state consistent >>>>>>> between the pages, then even if its is feasible performance-wise to >>>>>>> embed >>>>>>> it into all of them, some sort of common "view state model" should >>>>>>> probably >>>>>>> exist, and this again suggests just using a single instance... >>>>>>> >>>>>>> Vladimir >>>>>>> >>>>>>> >>>>>>> On Mon, Sep 30, 2013 at 3:07 PM, Николай Шатохин < >>>>>>> n.shatok...@gmail.com> wrote: >>>>>>> >>>>>>>> I need to have this object in different qml files (for i.e. >>>>>>>> GameChat must be shown on GameCreation,Game,GameResults pages: this it >>>>>>>> differents QML files and differents pages in PageStack), but I created >>>>>>>> only >>>>>>>> one QtQuickView in main.cpp. So, do view is qml file or QtQuckView >>>>>>>> object? >>>>>>>> >>>>>>>> >>>>>>>> 2013/9/30 Vladimir M. <mlvl...@gmail.com> >>>>>>>> >>>>>>>> You probably can't share a single instance of a QML visual item >>>>>>>>> between views, but as soon as you have the type registered properly / >>>>>>>>> importable / etc, you can use instantiate it in as many views as you >>>>>>>>> like. >>>>>>>>> A QObject pointer can be passed around to items living in >>>>>>>>> different veiws inside the same application, of course (but watch out >>>>>>>>> for >>>>>>>>> memory management issues -- see CppOwnership / QMLOwnership / etc in >>>>>>>>> the >>>>>>>>> docs under "memory management"). >>>>>>>>> >>>>>>>>> Easiest way may be to set the same object as a context prop for >>>>>>>>> several views (unless you have some objections to this practice, like >>>>>>>>> ones >>>>>>>>> mentioned up in the thread). >>>>>>>>> >>>>>>>>> Lastly, there is that (legitimate) trick allowing QML items to be >>>>>>>>> "rendered" by other items, resulting in the same item being shown in >>>>>>>>> multiple places of the same scene (but being manipalatable anywhere >>>>>>>>> except >>>>>>>>> its actual position) -- look into the shader effects and such. >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Sep 30, 2013 at 2:34 PM, Николай Шатохин < >>>>>>>>> n.shatok...@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> 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 Николай Шатохин <n.shatok...@gmail.com> >>>>>>>>>> >>>>>>>>>>> 0_o. I didn't know that all objects in QML are global. Thank you >>>>>>>>>>> very much. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> 2013/9/30 <mrqt...@gmail.com> >>>>>>>>>>> >>>>>>>>>>> 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 <michael.zane...@canonical.com> >>>>>>>>>>>> >>>>>>>>>>>>> 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 Николай Шатохин <n.shatok...@gmail.com> >>>>>>>>>>>>> > >>>>>>>>>>>>> > > 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 <michael.zane...@canonical.com> >>>>>>>>>>>>> > > >>>>>>>>>>>>> > >> 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, Николай Шатохин >>>>>>>>>>>>> > >> >>>>>>>>>>>>> > >> <n.shatok...@gmail.com>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 : ubuntu-phone@lists.launchpad.net >>>>>>>>>>>>> > >> > > Unsubscribe : https://launchpad.net/~ubuntu-phone >>>>>>>>>>>>> > >> > > More help : https://help.launchpad.net/ListHelp >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Mailing list: https://launchpad.net/~ubuntu-phone >>>>>>>>>> Post to : ubuntu-phone@lists.launchpad.net >>>>>>>>>> Unsubscribe : https://launchpad.net/~ubuntu-phone >>>>>>>>>> More help : https://help.launchpad.net/ListHelp >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >> >
-- Mailing list: https://launchpad.net/~ubuntu-phone Post to : ubuntu-phone@lists.launchpad.net Unsubscribe : https://launchpad.net/~ubuntu-phone More help : https://help.launchpad.net/ListHelp