Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QML & Array of Objects to QML side


  • Qt Champions 2017

    Hi

    I have array of Objects in C++ side. E.g QList<Fruits>. Assume that number of fruits are 5. I would like to display the name of fruit using five text elements.

    1. I can expose these objects using Model. If Expose the fruit list as model, I have to use them View.
    2. If I expose through QVariantList, any updates to fruit list will not be updated updated internally. Issues with this approach is that need to send the full list again.

    Is there way I can use the model, still update the data with model internally and use it without Views ?

    Please note that I'm experimenting with different options. If you have any inputs please suggest.



  • @dheerendra said in QML & Array of Objects to QML side:

    Is there way I can use the model, still update the data with model internally and use it without Views ?

    I didn't understand, can you rephrase the question? What do you mean by "update the data with model internally"? What is using without Views?


  • Qt Champions 2017

    @Eeli-K
    Thank you responding to my question. I would like to have model in C++. Assume I have 5 elements in model and it has role called 'name'. I would like to display the name with simple 5 text elements instead of using ListView or GridView etc. Also I would like the text elements to updated whenever the model changes.

    Hope it clarifies.



  • @dheerendra I think you still need something which uses a model automatically or you have to catch the signals from C++ and update the visual elements manually. Strictly speaking a Repeater is not a View but it's updated automatically:

    import QtQuick 2.7
    import QtQuick.Controls 2.2
    
    ApplicationWindow {
        visible: true
        width: 640
        height: 480
    
        ListModel {
            id: lm
            ListElement {}
            ListElement {}
        }
    
        Row {
              Repeater {
                  model: lm
                  Button {
                      text: lm.count
                      onClicked: lm.append({})
                  }
              }
          }
    }
    
    


  • I think Signal & Slot may be helpful for update data



  • @dheerendra

    Do you really need a model in C++ to do this. Here is how I create a row of tabs dynamically in QML:

     TabView {
            id:wayPointTabView
    
            anchors.top:titleArea.bottom
            anchors.topMargin:5
            anchors.left:parent.left
            anchors.right:parent.right
            clip:true
            height:325
            tabPosition:Qt.BottomEdge
            Component.onCompleted:{
                var i = controller.getNumOfMarkerTypes();
                for (var j = 0; j< i; j++) {
                    var tab = addTab(controller.getMarkerTypeString(j),waypointIconTabView)
                    tab.active = true;
                    console.log("\t\t>>>>>>Tab", tab.progress, tab.item)
                    tab.item.markerType = j;
                    //    tab.loaded.connect(wayPointTabView.xxx)
                    //      tab.loaded.connect(function() { tab.item.markerType = j; })
                    tab.item.focus = true
                }
                currentIndex = 1;
            }
        }
    
    Now controller is a c++ class.  It has the two methods defined as:
    (Controller.h)
    

    Q_INVOKABLE int getNumOfMarkerTypes();
    Q_INVOKABLE QString getMarkerTypeString(int);



  • @DBoosalis That will not be updated automatically, which dheerendra explicitly wanted.


Log in to reply