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