Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. QmlListProperty access in javascript
QtWS25 Last Chance

QmlListProperty access in javascript

Scheduled Pinned Locked Moved QML and Qt Quick
2 Posts 2 Posters 1.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    gtophe
    wrote on last edited by
    #1

    Hi,
    I have a C++ class which contains a list of objects. I want this list to be accessible in my QML interface, so a defined a property of type QQmlListProperty. When using this property as the model of a listview, everythin works fine. However, if I try to use this list in a javascript function, I can't do anything - a basic call to count() returns 'undefined'.

    The following example may clarify why I'm trying to do :
    Here's my Bar class - a simple object with a single property returning a string :

    @class Bar : public QObject
    {
    Q_OBJECT
    public:
    explicit Bar(const QString& name, QObject *parent = 0) : QObject(parent), _name(name) {}
    explicit Bar(QObject *parent = 0) : QObject(parent), _name("") {}

    Q_PROPERTY(QString name READ name NOTIFY nameChanged)
    
    QString name() const {return _name;}
    

    signals:
    void nameChanged();
    private:
    QString _name;

    };@

    Here's my Foo class, which contains a list of Bars :
    @class Foo : public QObject
    {
    Q_OBJECT
    public:
    explicit Foo(QObject *parent = 0) : QObject(parent) {}

    void initBars()
    

    {
    _bars.append(new Bar("Banana"));
    _bars.append(new Bar("Apple"));
    _bars.append(new Bar("Raspberry"));
    Q_EMIT barsChanged();
    }

    Q_PROPERTY(QQmlListProperty<Bar> bars READ bars NOTIFY barsChanged)
    
    QQmlListProperty<Bar> bars() { return QQmlListProperty<Bar>(this, _bars);}
    

    signals:
    void barsChanged();
    public slots:

    private:
    QList<Bar*> _bars;
    };@

    Here my QML file - foo is a context property set in my main.cpp :
    @import QtQuick 2.2
    import QtQuick.Controls 1.1
    import test.Bar 1.0
    import test.Foo 1.0

    ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Foobar")

    ListView {
        model: foo.bars
        id: listView
        anchors.centerIn: parent
        anchors.fill: parent
    
        delegate: Row {
            id: row
            Text {
                text: name
            }
        }
    
    }
    
    Component.onCompleted: {
        console.log(foo.bars.count);
        for(var i = 0; i < foo.bars.count; i++)
            console.log(foo.bars.get(i).name)
    }
    

    }@

    And finally, here's my main :
    @int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    qmlRegisterType<Foo>("test.Foo", 1, 0, "Foo");
    qmlRegisterType<Bar>("test.Bar", 1, 0, "Bar");
    QQmlApplicationEngine engine;
    Foo myFoo;
    myFoo.initBars();
    engine.rootContext()->setContextProperty("foo", &myFoo);
    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

    return app.exec();
    

    }
    @

    When I launch this example, the listview is correctly filled with 3 items - Banana, Apple, Raspberry.
    However, the javascript function called on Component.onCompleted only displays "qml: undefined" in the console.
    What am I doing wrong ? how can I use my list in javascript ?

    Thank you for your answers.

    1 Reply Last reply
    0
    • T Offline
      T Offline
      t3685
      wrote on last edited by
      #2

      Hi,

      The qmllistproperties work slightly in a different way than regular. You need to implement a number of static functions to get everything working. Check the documentation, it has examples to get you started!

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved