← Back to team overview

ubuntu-phone team mailing list archive

Re: Create QML view for C++ object (not class)

 

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.shatokhin@xxxxxxxxx>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@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~ubuntu-phone
> > More help   : https://help.launchpad.net/ListHelp



Follow ups

References