Дружище, ты меня прости, что я по-русски тебе отвечу, но ты не желаешь 
пробовать, прежде чем спрашивать? Или просто документацию посмотреть? А то это 
спам какой-то уже!

Best regards,
Roman.


07.10.13 13:12 Николай Шатохин написал(а):

Can I use QList of pointers? And get objects in QML.




2013/10/7 Николай Шатохин <n.shatok...@gmail.com>

Can I use QList (or something similar) as Q_PROPERTY? How can I use it in QML?


Best regards,
Nick



2013/10/2 Vladimir M. <mlvl...@gmail.com>


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

Reply via email to