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.5k 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 Offline
    RatzzR Offline
    Ratzz
    wrote on last edited by Ratzz
    #2

    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?

    --Alles ist gut.

    J.HilkJ RatzzR 2 Replies Last reply
    0
    • 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