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. Read of delegate objectName
Forum Updated to NodeBB v4.3 + New Features

Read of delegate objectName

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
19 Posts 5 Posters 2.0k 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.
  • IntruderExcluderI Offline
    IntruderExcluderI Offline
    IntruderExcluder
    wrote on last edited by
    #8

    In case of QML you can create Rectangle object directly from delegate property:

        ListView {
            id: view
            objectName: "listview"
            delegate: Rectangle { objectName: "delegaterect" }
        }
    
        Component.onCompleted: {
            let d = view.delegate.createObject(null);
            console.log(d.objectName);
            d.Component.destruction.connect(() => { console.log("READY TO BE DESTRUCTED"); });
            d.destroy();
        }
    

    In case of C++ side code can be something like:

        auto lv = engine.rootObjects()[0]->findChild<QObject*>("listview");
        auto component = lv->property("delegate").value<QQmlComponent*>();
        auto delegate = component->create();
        qDebug() << delegate->objectName();
        delegate->deleteLater();
    
    1 Reply Last reply
    0
    • G Galilio

      Hello everybody,

      I have something like this:
      QML:

      ListView{
      id: listViewId
      objectName:"listViewObj"
      ....
      delegate: Rectangle {
      	id: rectnagleId
      	objectName: "rectangleDelegate"
      	....
      	}
      }
      

      and how can i get the property from the delegate?

      J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #9

      @galilio said in Read of delegate objectName:

      ListView{
      id: listViewId
      objectName:"listViewObj"
      ....
      delegate: Rectangle {
      	id: rectnagleId
      	objectName: "rectangleDelegate"
      	....
      	}
      }
      
      //to get item and access the properies
      
      function getItemAtIndex(index){
          var item = listViewId.itemAtIndex(index);
          if(item){
                console.log(item.objectName)
          }
      }
      

      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      G 1 Reply Last reply
      0
      • J.HilkJ J.Hilk

        @galilio said in Read of delegate objectName:

        ListView{
        id: listViewId
        objectName:"listViewObj"
        ....
        delegate: Rectangle {
        	id: rectnagleId
        	objectName: "rectangleDelegate"
        	....
        	}
        }
        
        //to get item and access the properies
        
        function getItemAtIndex(index){
            var item = listViewId.itemAtIndex(index);
            if(item){
                  console.log(item.objectName)
            }
        }
        
        G Offline
        G Offline
        Galilio
        wrote on last edited by
        #10

        @j-hilk
        my qt version is 5.9.1

        J.HilkJ 1 Reply Last reply
        0
        • G Galilio

          @j-hilk
          my qt version is 5.9.1

          J.HilkJ Offline
          J.HilkJ Offline
          J.Hilk
          Moderators
          wrote on last edited by J.Hilk
          #11

          @galilio fair enough.

          alright, trick 17 (untested)

          ListView{
          id: listViewId
          objectName:"listViewObj"
          var testObject: undefined
          signal assignToObject(var id)
          ....
          delegate: Rectangle {
          	id: rectnagleId
          	objectName: "rectangleDelegate"
                  Connections{
                       target: listViewId
                       onAssignToObject: if(index === id) listViewId.testObject = rectnagleId
                  }
          	....
          	}
          }
          //to get item and access the properies
                  onTestObjectChanged:{
                      if(testObject)
                          console.log(testObject.objectName)
                  }
          
          

          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


          Q: What's that?
          A: It's blue light.
          Q: What does it do?
          A: It turns blue.

          1 Reply Last reply
          1
          • G Offline
            G Offline
            Galilio
            wrote on last edited by
            #12

            @j-hilk said in Read of delegate objectName:

            onAssignToObject: if(index === id) listViewId.testObject = rectnagleId

            what is your id here
            Thanks

            J.HilkJ 1 Reply Last reply
            0
            • G Galilio

              @j-hilk said in Read of delegate objectName:

              onAssignToObject: if(index === id) listViewId.testObject = rectnagleId

              what is your id here
              Thanks

              J.HilkJ Offline
              J.HilkJ Offline
              J.Hilk
              Moderators
              wrote on last edited by J.Hilk
              #13

              @galilio said in Read of delegate objectName:

              @j-hilk said in Read of delegate objectName:

              onAssignToObject: if(index === id) listViewId.testObject = rectnagleId

              what is your id here
              Thanks

              the argument of the signal
              signal assignToObject(var id)


              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


              Q: What's that?
              A: It's blue light.
              Q: What does it do?
              A: It turns blue.

              1 Reply Last reply
              1
              • G Offline
                G Offline
                Galilio
                wrote on last edited by
                #14
                This post is deleted!
                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  Galilio
                  wrote on last edited by
                  #15

                  Sorry:
                  nothing happens
                  Slot was not called

                  J.HilkJ 1 Reply Last reply
                  0
                  • G Galilio

                    Sorry:
                    nothing happens
                    Slot was not called

                    J.HilkJ Offline
                    J.HilkJ Offline
                    J.Hilk
                    Moderators
                    wrote on last edited by
                    #16

                    @galilio
                    works fine in my test file

                    import QtQuick 2.12
                    import QtQuick.Window 2.12
                    import QtQuick.Controls 2.0
                    
                    Window {
                        visible: true
                        width: 400
                        height: 750
                        title: qsTr("Hello World")
                    
                        id: root
                        property int testIndex: 0
                        Timer{
                            running: true
                            interval: 1000
                            repeat: true
                            onTriggered: {
                                listViewId.assignToObject(root.testIndex)
                                testIndex++
                                if(testIndex >= 10)
                                    testIndex = 0
                            }
                        }
                    
                        ListView{
                            id: listViewId
                            anchors.fill: parent
                            objectName:"listViewObj"
                            property var testObject: undefined
                            onTestObjectChanged:{
                                if(testObject)
                                    console.log(testObject.objectName)
                            }
                            signal assignToObject(var id)
                    
                            model: 10
                            spacing: 2
                    
                            delegate: Rectangle {
                                id: rectnagleId
                                objectName: "rectangleDelegate" + index
                                Text {
                                    text: modelData
                                    anchors.centerIn: parent
                                }
                                width: listViewId.width
                                height:  20
                                color: "green"
                                Connections{
                                    target: listViewId
                                    onAssignToObject: if(index === id) listViewId.testObject = rectnagleId
                                }
                            }
                        }
                    }
                    

                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    1 Reply Last reply
                    3
                    • G Offline
                      G Offline
                      Galilio
                      wrote on last edited by
                      #17

                      @J-Hilk

                      and how is it if I want to test the delegate with unit test (in cpp) sorry

                      1 Reply Last reply
                      0
                      • G Galilio

                        I want to write a unittest for the QML file.
                        I could access all objects using ObjectName and check the property.

                        at delegate I can not use objectname and my question how can I access the property within this delegate?

                        S Offline
                        S Offline
                        Shivaraj
                        wrote on last edited by
                        #18

                        @Galilio how do you access the objects using objectName can you share some code

                        dheerendraD 1 Reply Last reply
                        0
                        • S Shivaraj

                          @Galilio how do you access the objects using objectName can you share some code

                          dheerendraD Offline
                          dheerendraD Offline
                          dheerendra
                          Qt Champions 2022
                          wrote on last edited by
                          #19

                          @Shivaraj

                          Delegate you can't access using the object name. These are dynamically created object.

                          Dheerendra
                          @Community Service
                          Certified Qt Specialist
                          http://www.pthinks.com

                          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