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. Access item inside ListView via delegate
Forum Updated to NodeBB v4.3 + New Features

Access item inside ListView via delegate

Scheduled Pinned Locked Moved Solved QML and Qt Quick
qmllistviewdelegatebutton
14 Posts 3 Posters 4.7k Views 1 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.
  • RatzzR Ratzz

    I was able to access the TextEdit value using property value which is set to model via ListElement something like this

    ListElement { editProperty: "Initial text" }
    

    and on click event

     onClicked: { listModel.setProperty(index, "editProperty", editField.text) }
    
    

    Still I am unable to access the delete Button . Does anyone know to access it?

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

    hi @Ratzz

    you already "listen" to the listModel count property for your onClicked why don't you make the visible property depending on it as well ?

                      Column {
                            width: 100
                            Button {
                                text: "Delete"
                                visible: listModel.count > 1
                                onClicked:{
                                    if(listModel.count > 1)
                                        listModel.remove(index);
                                }
                            }
                        }
    

    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.

    RatzzR 1 Reply Last reply
    2
    • J.HilkJ J.Hilk

      hi @Ratzz

      you already "listen" to the listModel count property for your onClicked why don't you make the visible property depending on it as well ?

                        Column {
                              width: 100
                              Button {
                                  text: "Delete"
                                  visible: listModel.count > 1
                                  onClicked:{
                                      if(listModel.count > 1)
                                          listModel.remove(index);
                                  }
                              }
                          }
      
      RatzzR Offline
      RatzzR Offline
      Ratzz
      wrote on last edited by
      #4

      @J-Hilk said in Access item inside ListView via delegate:

      you already "listen" to the listModel count property for your onClicked why don't you make the visible property depending on it as well ?

      It just worked :) Thank you @J-Hilk

      --Alles ist gut.

      1 Reply Last reply
      1
      • RatzzR Ratzz

        I was able to access the TextEdit value using property value which is set to model via ListElement something like this

        ListElement { editProperty: "Initial text" }
        

        and on click event

         onClicked: { listModel.setProperty(index, "editProperty", editField.text) }
        
        

        Still I am unable to access the delete Button . Does anyone know to access it?

        RatzzR Offline
        RatzzR Offline
        Ratzz
        wrote on last edited by
        #5

        @Ratzz said in Access item inside ListView via delegate:

        I was able to access the TextEdit value using property value which is set to model via ListElement something like this

        @J-Hilk , Is there any better way than this ?

        --Alles ist gut.

        J.HilkJ 1 Reply Last reply
        0
        • RatzzR Ratzz

          @Ratzz said in Access item inside ListView via delegate:

          I was able to access the TextEdit value using property value which is set to model via ListElement something like this

          @J-Hilk , Is there any better way than this ?

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

          @Ratzz
          for example, you could just bind the text directly:

                              Column {
                                  width: 50
                                  TextEdit { text: editableText}
                              }
          ...
          ...
               ListModel {
                      id: listModel
                      ListElement {
                              editableText: "SomeText"
                      }
               }
          

          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.

          RatzzR 1 Reply Last reply
          2
          • RatzzR Offline
            RatzzR Offline
            Ratzz
            wrote on last edited by
            #7

            That works as well

            --Alles ist gut.

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

              @Ratzz
              for example, you could just bind the text directly:

                                  Column {
                                      width: 50
                                      TextEdit { text: editableText}
                                  }
              ...
              ...
                   ListModel {
                          id: listModel
                          ListElement {
                                  editableText: "SomeText"
                          }
                   }
              
              RatzzR Offline
              RatzzR Offline
              Ratzz
              wrote on last edited by Ratzz
              #8

              @J-Hilk
              Now when I tried with empty text

              ListModel {
                          id: listModel
                          ListElement {
                                  editableText: ""
                          }
                   }
              

              and then I tried to change the text field value manually say "sometext" . Button event returned null

              onClicked: { 
              listModel.get(0).editableText 
              console.log(listModel.get(0).editableText ) //Null
              }
              

              while button event setting property gave proper result

              onClicked: { 
              listModel.setProperty(index, "editableText ", id.text)
              console.log(listModel.get(0).editableText ) //"sometext"
              }

              --Alles ist gut.

              J.HilkJ GrecKoG 2 Replies Last reply
              0
              • RatzzR Ratzz

                @J-Hilk
                Now when I tried with empty text

                ListModel {
                            id: listModel
                            ListElement {
                                    editableText: ""
                            }
                     }
                

                and then I tried to change the text field value manually say "sometext" . Button event returned null

                onClicked: { 
                listModel.get(0).editableText 
                console.log(listModel.get(0).editableText ) //Null
                }
                

                while button event setting property gave proper result

                onClicked: { 
                listModel.setProperty(index, "editableText ", id.text)
                console.log(listModel.get(0).editableText ) //"sometext"
                }
                J.HilkJ Offline
                J.HilkJ Offline
                J.Hilk
                Moderators
                wrote on last edited by
                #9

                @Ratzz interesting

                I usually have c++ based models, so my experience with QML models is limited 😕

                Maybe someone else know more about this behavior


                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.

                RatzzR 1 Reply Last reply
                1
                • J.HilkJ J.Hilk

                  @Ratzz interesting

                  I usually have c++ based models, so my experience with QML models is limited 😕

                  Maybe someone else know more about this behavior

                  RatzzR Offline
                  RatzzR Offline
                  Ratzz
                  wrote on last edited by Ratzz
                  #10

                  @J-Hilk
                  okay Fine.

                  --Alles ist gut.

                  1 Reply Last reply
                  0
                  • RatzzR Ratzz

                    @J-Hilk
                    Now when I tried with empty text

                    ListModel {
                                id: listModel
                                ListElement {
                                        editableText: ""
                                }
                         }
                    

                    and then I tried to change the text field value manually say "sometext" . Button event returned null

                    onClicked: { 
                    listModel.get(0).editableText 
                    console.log(listModel.get(0).editableText ) //Null
                    }
                    

                    while button event setting property gave proper result

                    onClicked: { 
                    listModel.setProperty(index, "editableText ", id.text)
                    console.log(listModel.get(0).editableText ) //"sometext"
                    }
                    GrecKoG Offline
                    GrecKoG Offline
                    GrecKo
                    Qt Champions 2018
                    wrote on last edited by
                    #11

                    @Ratzz said in Access item inside ListView via delegate:

                    listModel.get(0).editableText

                    What is that line supposed to do? You are not modifying anything here

                    onClicked: { 
                        listModel.setProperty(index, "editableText ", textEdit.text)
                    }
                    

                    just do that instead:

                    onClicked: editableText = textEdit.text
                    
                    1 Reply Last reply
                    1
                    • RatzzR Offline
                      RatzzR Offline
                      Ratzz
                      wrote on last edited by
                      #12

                      @GrecKo , Yes I can do that as well.

                      How can I get the updated text "editableText" as soon I change the value of TextEdit is changed?

                      --Alles ist gut.

                      GrecKoG 1 Reply Last reply
                      0
                      • RatzzR Ratzz

                        @GrecKo , Yes I can do that as well.

                        How can I get the updated text "editableText" as soon I change the value of TextEdit is changed?

                        GrecKoG Offline
                        GrecKoG Offline
                        GrecKo
                        Qt Champions 2018
                        wrote on last edited by
                        #13

                        @Ratzz console.log(editableText ), you have access to the role values (as context properties) corresponding to the model cell in the delegate

                        1 Reply Last reply
                        0
                        • RatzzR Offline
                          RatzzR Offline
                          Ratzz
                          wrote on last edited by Ratzz
                          #14

                          @GrecKo , I mean without the button, when I edit the values of TextEdit, I should be able to get the modified text. I tried via property. It always gave me empty

                          --Alles ist gut.

                          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