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. Compare Items of listview and aray

Compare Items of listview and aray

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
14 Posts 4 Posters 2.7k Views 3 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.
  • IntruderExcluderI Offline
    IntruderExcluderI Offline
    IntruderExcluder
    wrote on last edited by
    #3

    You should operate with model data, not with delegates, since they are not actually exists when they get out of ListView viewport.

    1 Reply Last reply
    0
    • P Offline
      P Offline
      Psyduck0205
      wrote on last edited by
      #4

      I have to use python.
      I tried work around the object model like InteruderExcluder suggested

      listview = squish.waitForObject(ecusListView)
      model = listview.model
      

      But with that, model is "null"
      I tried to iterate over the Elements but like IntruderExcluder said, i cant past the non visible delegates. So im basicly at 0 again.
      Any help of how i have to work around the model?

      (Squish is basicly an IDE for GUI Testing. Thats what its all About. I Need to make sure that the model or delegates are correct in correlation to the entries in the database.)

      ODБOïO 1 Reply Last reply
      0
      • P Psyduck0205

        I have to use python.
        I tried work around the object model like InteruderExcluder suggested

        listview = squish.waitForObject(ecusListView)
        model = listview.model
        

        But with that, model is "null"
        I tried to iterate over the Elements but like IntruderExcluder said, i cant past the non visible delegates. So im basicly at 0 again.
        Any help of how i have to work around the model?

        (Squish is basicly an IDE for GUI Testing. Thats what its all About. I Need to make sure that the model or delegates are correct in correlation to the entries in the database.)

        ODБOïO Offline
        ODБOïO Offline
        ODБOï
        wrote on last edited by
        #5

        @Psyduck0205
        a qml js version in case it can help

        Window {
            visible: true
            width: 640
            height: 480
            title: qsTr("Hello World")
        
            property var myArr : [33,66.6,1.94]
        
            ListModel {
                id: fruitModel
        
                ListElement {
                    name: "Apple"
                    cost: 800
                }
                ListElement {
                    name: "Orange"
                    cost: 66.6
                }
                ListElement {
                    name: "Banana"
                    cost: 1.95
                }
            }
        
            ListView{
                id:l
                model: fruitModel
                anchors.fill: parent
                delegate: Text {
                    height: 30
                    width: parent.width
                    text: name+  " : "+ cost
                }
            }
        
            Component.onCompleted: compare()
        
            function compare(){
                for(var e=0; e < l.model.count; e++){
                    console.log( (l.model.get(e).cost === myArr[e]) )
                }
            }
        }
        
        1 Reply Last reply
        0
        • P Offline
          P Offline
          Psyduck0205
          wrote on last edited by Psyduck0205
          #6
          		ListView {
          			id: filteredElements
          
          			anchors.fill: parent
          
          			header: Item {}
          			delegate: ListViewDelegate {
          				onClicked: root.filteredClickHandler
          			}
          
          			model: root.controller.filteredModel
          
          			listView.section.property: "shortName"
          			listView.section.criteria: ViewSection.FirstCharacter
          			listView.section.labelPositioning: ViewSection.CurrentLabelAtStart | ViewSection.InlineLabels
          			listView.section.delegate: Component {
          				id: sectionHeading
          				Rectangle {
          					width: parent.width
          					height: childrenRect.height
          					color: Style.rbsDarkGray
          
          					Text {
          						leftPadding: Style.listView.delegate.textPadding
          						text: section
          						font.bold: true
          						font.pixelSize: 10
          						color: Style.rbsLightBlue
          					}
          				}
          			}
          

          I digged trough our bitbucket and managed to finde the Definition of the listview. So that is basicly what i have to work with.
          I dont realy understand how to Transfer the Code of LeLev to python.

          console.log( (l.model.get(e).cost === myArr[e]) )

          Does every l.model has a get() function?

          Without compiling it i tried something:

          listview = squish.waitForObject(ecusListView) #That Returns the objects QQuickListview
          model = listview.model
          maxcount = listview.count
          myarray = []
          for i in range(maxcount):
              myarray.append(listview.model.get(i).text) 
          

          Does that makes sense? Is that the Right way?

          1 Reply Last reply
          0
          • IntruderExcluderI Offline
            IntruderExcluderI Offline
            IntruderExcluder
            wrote on last edited by
            #7

            If it is QML ListModel then yes, it has get method. For C++ models derived from QAbstractItemModel there is data method to retrieve data by role. Also rowCount and index are exposed to QML too.

            P 1 Reply Last reply
            0
            • IntruderExcluderI IntruderExcluder

              If it is QML ListModel then yes, it has get method. For C++ models derived from QAbstractItemModel there is data method to retrieve data by role. Also rowCount and index are exposed to QML too.

              P Offline
              P Offline
              Psyduck0205
              wrote on last edited by
              #8

              @IntruderExcluder
              Yes it is QML.

              when i try to run it i get the following error:

              Detail AttributeError: 'QVariant' Squish object has no attribute 'get' C:\Users\tsc\repos\rbsplus_guitests\suite_RBS_Plus_Test_Suite\shared\steps\steps.py:333

              Line 333:
              myarray.append(listview.model.get(i).text)

              1 Reply Last reply
              0
              • IntruderExcluderI Offline
                IntruderExcluderI Offline
                IntruderExcluder
                wrote on last edited by IntruderExcluder
                #9

                I'm not familiar with python, but can give you an example in C++. Lets say you have some ListView with ListModel declared in main QML file:

                    ListView {
                        objectName: "view1"
                        model: ListModel {
                            ListElement { prop1: "asd"; prop2: 42 }
                        }
                    }
                

                Here is an example how to get values for Qt 5.12.3 (it is a bit easier for greater versions):

                    /* Get list view */
                    auto view = engine.rootObjects()[0]->findChild<QObject*>("view1");
                    /* Get model property */
                    QQmlListModel* model = view->property("model").value<QQmlListModel*>();
                    /* Some magic */
                    auto handle = model->get(0);
                    auto eengine = qmlEngine(model)->handle();
                    QJSValue jsvalue(eengine, handle);
                    /* Get values of ListElement item */
                    QString prop1 = jsvalue.property("prop1").toString(); // "asd"
                    int prop2 = jsvalue.property("prop2").toInt(); // 42
                

                You also need to use qml-private modules, since QQmlListModel is private class.

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  Psyduck0205
                  wrote on last edited by Psyduck0205
                  #10

                  Thank Intruder,

                  i understand how that works :)

                  The only Problem: I wondered why i couldnt use the get() function. And after a bit of searching i managed to Change the Code to that:

                  listview = squish.waitForObject(ecusListView)
                  model = object.convertTo(listview.model,"QObject")
                  maxcount = listview.count
                  myarray = []
                  for i in range(maxcount):
                      myarray.append(model.get(i).text)    
                  

                  listview.model Returns a QVariant, which is basicly a container where you put everything in, and let python handle it.
                  I then casted the QVariant to QObject to see which class is behind the QVariant.
                  Turns out its not QmlLIstModel, its

                  https://doc.qt.io/qt-5/qidentityproxymodel.html#details

                  And now i have no clue to handle that class and do what i want

                  1 Reply Last reply
                  0
                  • IntruderExcluderI Offline
                    IntruderExcluderI Offline
                    IntruderExcluder
                    wrote on last edited by
                    #11

                    So, it is C++ model, not QML. Then you can use data method to retrieve data. Something like this:

                    for i in range(maxcount):
                        myarray.append(model.data(model.index(i, 0), %your_role_here%))
                    
                    1 Reply Last reply
                    1
                    • P Offline
                      P Offline
                      Psyduck0205
                      wrote on last edited by Psyduck0205
                      #12

                      Hey Intruder thank you for your Reply.

                      That brought me close the solution i think.

                      The Problem that i have now is: How to deal with the QVariants that are now written in the Array.
                      I think i have to cast them first to extract the exact value i want.

                      Do you know what i have to do?

                      S 1 Reply Last reply
                      0
                      • IntruderExcluderI Offline
                        IntruderExcluderI Offline
                        IntruderExcluder
                        wrote on last edited by
                        #13

                        Depends on what you want. If you have list of QVariant then you can compare them, at least in C++ this works. To compare with exact values you should of course get values from QVariant. For example cast them to integers with toInt() method.

                        1 Reply Last reply
                        3
                        • P Psyduck0205

                          Hey Intruder thank you for your Reply.

                          That brought me close the solution i think.

                          The Problem that i have now is: How to deal with the QVariants that are now written in the Array.
                          I think i have to cast them first to extract the exact value i want.

                          Do you know what i have to do?

                          S Offline
                          S Offline
                          Sahana
                          wrote on last edited by
                          #14

                          @Psyduck0205

                          I too facing similar issue. I need to access list of qvariant from squish?
                          Can you help me ?

                          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