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. Retrieve number of elements of a QAbstractListModel and access items by index and role in qml
Forum Updated to NodeBB v4.3 + New Features

Retrieve number of elements of a QAbstractListModel and access items by index and role in qml

Scheduled Pinned Locked Moved Solved QML and Qt Quick
16 Posts 3 Posters 4.6k Views 2 Watching
  • 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.
  • M maxwell31

    Thanks again. The way with calling it with data and index is working. I am wondering though whether there is an easier way, which would use the roleNames in my model. Otherwise, I need to register my model class, so that I have the roleEnums available.

    Gojir4G Offline
    Gojir4G Offline
    Gojir4
    wrote on last edited by
    #7

    @maxwell31 What's is your goal exactly ?

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maxwell31
      wrote on last edited by
      #8

      I understand what you are saying. My problem is the following:

      I have some c++ objects, which e.g. have a height property. I want to display these objects in my own qml bar chart. In order to compute the maximum height I iterate over the elements in my model in qml, and would like to access the height property. In a repeater or listmodel, the string role name is only available for the current object right? How could I access the height role inside a loop over my objects?

      Gojir4G 1 Reply Last reply
      0
      • M maxwell31

        I understand what you are saying. My problem is the following:

        I have some c++ objects, which e.g. have a height property. I want to display these objects in my own qml bar chart. In order to compute the maximum height I iterate over the elements in my model in qml, and would like to access the height property. In a repeater or listmodel, the string role name is only available for the current object right? How could I access the height role inside a loop over my objects?

        Gojir4G Offline
        Gojir4G Offline
        Gojir4
        wrote on last edited by
        #9

        @maxwell31 You can browse them using a loop from QML. But yes you need to register your type in this case to access the enum values.

        for(var i = 0; i < model.rowCount(); i++){
        model.data(model.index(i, 0),
        }

        I would suggest that you implement this kind of calculation in the C++ side, and just add a method like ``getMaxHeight()" in your model, with Q_INVOKABLE directive. At my opinion, it is easier to write and more efficient

        1 Reply Last reply
        0
        • M Offline
          M Offline
          maxwell31
          wrote on last edited by
          #10

          Most likely simply going to do

          qmlRegisterType<MyModel>("MyModel",1,0,"MyModel");
          

          is probably the easiest. Though annoying, as it has to be imported in the qml file. Obviously a maybe better option would be to move more of the logic to c++.

          But I understand it right, that there is no way in QML to iterate over the elements in a model and use the string role name?

          Gojir4G 1 Reply Last reply
          0
          • M maxwell31

            Most likely simply going to do

            qmlRegisterType<MyModel>("MyModel",1,0,"MyModel");
            

            is probably the easiest. Though annoying, as it has to be imported in the qml file. Obviously a maybe better option would be to move more of the logic to c++.

            But I understand it right, that there is no way in QML to iterate over the elements in a model and use the string role name?

            Gojir4G Offline
            Gojir4G Offline
            Gojir4
            wrote on last edited by
            #11

            @maxwell31 said in Retrieve number of elements of a QAbstractListModel and access items by index and role in qml:

            But I understand it right, that there is no way in QML to iterate over the elements in a model and use the string role name?

            I would say there is not simple way. But you could retrieve the roleNames() map from QML and then resolve role ID into names.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              maxwell31
              wrote on last edited by
              #12

              I think the roleNames map (QHash) does not convert to a type qml understands.

              Gojir4G 1 Reply Last reply
              0
              • M maxwell31

                I think the roleNames map (QHash) does not convert to a type qml understands.

                Gojir4G Offline
                Gojir4G Offline
                Gojir4
                wrote on last edited by Gojir4
                #13

                @maxwell31 Yes, as I said, there is no simple way. What about adding a method QString roleName(int role) in the model which return the name of a role.

                @maxwell31 Yes, as I said, there is no simple way. What about adding a method int nameRole(QString roleName) in the model which return the role according to the name.

                Anyway what does it changes if you use role or name of role ?

                1 Reply Last reply
                0
                • GrecKoG Offline
                  GrecKoG Offline
                  GrecKo
                  Qt Champions 2018
                  wrote on last edited by
                  #14

                  I've created such class as proof of concept : https://github.com/oKcerG/QmlModelHelper (with the WiP readme : https://gist.github.com/oKcerG/eeea734bdacc51b3ae58650de5f05943)

                  in qml you could then do : yourModel.ModelHelper.roleForName("yourRoleName")

                  1 Reply Last reply
                  1
                  • M Offline
                    M Offline
                    maxwell31
                    wrote on last edited by
                    #15

                    @Gojir4 said in Retrieve number of elements of a QAbstractListModel and access items by index and role in qml:

                    Anyway what does it changes if you use role or name of role ?

                    I usually don't know the integer values of my custom roles, and without registering the model (which is a practicable solution) I don't have access to them. But you are right, adding a nameRole function would work fine.

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      maxwell31
                      wrote on last edited by
                      #16

                      @GrecKo said in Retrieve number of elements of a QAbstractListModel and access items by index and role in qml:

                      I've created such class as proof of concept

                      Thanks for sharing

                      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