CONSTANT (or whatever the name is) helps here as well -- if the prop does not change :)
On Wed, Oct 2, 2013 at 7:58 PM, Николай Шатохин <n.shatok...@gmail.com>wrote: > 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 > >
-- 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