Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Tableview row should change on pressed in QML
Qt 6.12 LTS is out! See what's new in the release blog

Tableview row should change on pressed in QML

Scheduled Pinned Locked Moved Solved QML and Qt Quick
13 Posts 3 Posters 2.4k 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.
  • Bhushan_SureB Bhushan_Sure

    My delegate is image in tableview, How to change image of row which is selected onPressed and onReleased it should go back in it's original state.

    itemDelegate: Image
                {
                    id:item_id
                    height: (tableView.height/(listmodel.count < 4 ? listmodel.count : 4))
                    source:
                    {
                        var activeRow = tableView.currentRow === styleData.row
                        (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                    }
    
                    MouseArea
                    {
                        id:table_mouse_id
                        anchors.fill: parent
    
                        onPressed:
                        {
                           source = image 4
                        }
    
                        onReleased:
                        {
                            tableView.currentRow = styleData.row
                        }
                    }
    

    onPressed image 4 is getting load but Onreleased it is remaining as it is, everything is not being updated. it should update as onReleased it will update whole table means it will update whole cell again.

    Bhushan_SureB Offline
    Bhushan_SureB Offline
    Bhushan_Sure
    wrote on last edited by
    #2

    @Bhushan_Sure @J-Hilk @LeLev @dheerendra @Nikhilesh-N Any suggestion ?

    ODБOïO 1 Reply Last reply
    0
    • Bhushan_SureB Bhushan_Sure

      My delegate is image in tableview, How to change image of row which is selected onPressed and onReleased it should go back in it's original state.

      itemDelegate: Image
                  {
                      id:item_id
                      height: (tableView.height/(listmodel.count < 4 ? listmodel.count : 4))
                      source:
                      {
                          var activeRow = tableView.currentRow === styleData.row
                          (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                      }
      
                      MouseArea
                      {
                          id:table_mouse_id
                          anchors.fill: parent
      
                          onPressed:
                          {
                             source = image 4
                          }
      
                          onReleased:
                          {
                              tableView.currentRow = styleData.row
                          }
                      }
      

      onPressed image 4 is getting load but Onreleased it is remaining as it is, everything is not being updated. it should update as onReleased it will update whole table means it will update whole cell again.

      Nikhilesh NN Offline
      Nikhilesh NN Offline
      Nikhilesh N
      wrote on last edited by Nikhilesh N
      #3

      @Bhushan_Sure, see this part of your code.

                      MouseArea
                      {
                          id:table_mouse_id
                          anchors.fill: parent
      
                          onPressed:
                          {
                             source = image 4
                          }
      
                          onReleased:
                          {
                              tableView.currentRow = styleData.row
                          }
                      }
      

      onPressed image 4 is getting load but Onreleased it is remaining as it is, everything is not being updated.

      I suspect the above problem is hapenning during the 'onPressed' handler, and image4 is being updated in styleData.row also because of it.
      What is actually stored in styleData.row? Can you add some console debug statements in either of the MouseArea handlers if printable console logs are possible?

      Bhushan_SureB 1 Reply Last reply
      1
      • Nikhilesh NN Nikhilesh N

        @Bhushan_Sure, see this part of your code.

                        MouseArea
                        {
                            id:table_mouse_id
                            anchors.fill: parent
        
                            onPressed:
                            {
                               source = image 4
                            }
        
                            onReleased:
                            {
                                tableView.currentRow = styleData.row
                            }
                        }
        

        onPressed image 4 is getting load but Onreleased it is remaining as it is, everything is not being updated.

        I suspect the above problem is hapenning during the 'onPressed' handler, and image4 is being updated in styleData.row also because of it.
        What is actually stored in styleData.row? Can you add some console debug statements in either of the MouseArea handlers if printable console logs are possible?

        Bhushan_SureB Offline
        Bhushan_SureB Offline
        Bhushan_Sure
        wrote on last edited by
        #4

        @Nikhilesh-N Thank you for suggestion. Hi nikhilesh, i resolved the issue with some different way , what i did is i put two images and
        "onpressed" i am making one image.visible = true and "onreleased ", i am making image.visible = false.

        1 Reply Last reply
        1
        • Nikhilesh NN Offline
          Nikhilesh NN Offline
          Nikhilesh N
          wrote on last edited by
          #5

          @Bhushan_Sure, very nice.
          Also, please share your code sample here so that others can benefit from it.

          Bhushan_SureB 1 Reply Last reply
          0
          • Bhushan_SureB Bhushan_Sure

            @Bhushan_Sure @J-Hilk @LeLev @dheerendra @Nikhilesh-N Any suggestion ?

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

            @Bhushan_Sure hi, you can't do this :

            Image {
                  id:item_id
                  height: (tableView.height/(listmodel.count < 4 ? listmodel.count : 4))
                  source:
                            {
                                var activeRow = tableView.currentRow === styleData.row
                                (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                            }
            

            you assign a function to source of your image, but that function does not return anything, you had to return var activeRow

            eg :

            Rectangle {
                property bool _isRed: false
                color: {var c = _isRed ? "red" : "blue";return c} 
            }
            

            @Bhushan_Sure said in Tableview row should change on pressed in QML:

            "onpressed" i am making one image.visible = true and "onreleased ", i am making image.visible = false.

            you can do

            Image{
            visible : mouseAreaId.pressed
            }

            Bhushan_SureB 1 Reply Last reply
            2
            • ODБOïO ODБOï

              @Bhushan_Sure hi, you can't do this :

              Image {
                    id:item_id
                    height: (tableView.height/(listmodel.count < 4 ? listmodel.count : 4))
                    source:
                              {
                                  var activeRow = tableView.currentRow === styleData.row
                                  (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                              }
              

              you assign a function to source of your image, but that function does not return anything, you had to return var activeRow

              eg :

              Rectangle {
                  property bool _isRed: false
                  color: {var c = _isRed ? "red" : "blue";return c} 
              }
              

              @Bhushan_Sure said in Tableview row should change on pressed in QML:

              "onpressed" i am making one image.visible = true and "onreleased ", i am making image.visible = false.

              you can do

              Image{
              visible : mouseAreaId.pressed
              }

              Bhushan_SureB Offline
              Bhushan_SureB Offline
              Bhushan_Sure
              wrote on last edited by
              #7

              @LeLev Hi, i am not returning anything but it is taking values, suppose
              A?B:C, so suppose A is true the it is returning B automatically, is it not right way ?

              ODБOïO 1 Reply Last reply
              0
              • Nikhilesh NN Nikhilesh N

                @Bhushan_Sure, very nice.
                Also, please share your code sample here so that others can benefit from it.

                Bhushan_SureB Offline
                Bhushan_SureB Offline
                Bhushan_Sure
                wrote on last edited by
                #8

                @Nikhilesh-N Yes, Source code is attached.

                itemDelegate: Image
                            {
                                id:item_id
                                height: (tableView.height/(listmodel.count < 4 ? listmodel.count : 4))
                                source:
                                {
                                    var activeRow = tableView.currentRow === styleData.row
                                    (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                                }
                
                                MouseArea
                                {
                                    id:table_mouse_id
                                    anchors.fill: parent
                
                                    onPressed:
                                    {
                                      image4.visible=true
                                    }
                
                                    onReleased:
                                    {
                                        image4.visible=false
                                    }
                                }
                }
                
                1 Reply Last reply
                1
                • Bhushan_SureB Bhushan_Sure

                  @LeLev Hi, i am not returning anything but it is taking values, suppose
                  A?B:C, so suppose A is true the it is returning B automatically, is it not right way ?

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

                  hi,

                  @Bhushan_Sure said in Tableview row should change on pressed in QML:

                  i am not returning anything but it is taking values

                  no, you are just assigning your image path to a variable called var activeRow

                  @Bhushan_Sure said in Tableview row should change on pressed in QML:

                  suppose
                  A?B:C

                  ok but you do var D = A?B:C

                  please test it and you will see

                  Rectangle {
                      property bool _isRed: false
                      color: {var c = _isRed ? "red" : "blue";}  // you return nothing, **var c** is "blue" but the rectangle no!
                  }
                  
                  Rectangle {
                      property bool _isRed: false
                      color: {var c = _isRed ? "red" : "blue";return c }  // now color will be blue
                  // or return isRed ? "red" : "blue";
                  // or isRed ? "red" : "blue";
                  }
                  
                  Bhushan_SureB 1 Reply Last reply
                  0
                  • ODБOïO ODБOï

                    hi,

                    @Bhushan_Sure said in Tableview row should change on pressed in QML:

                    i am not returning anything but it is taking values

                    no, you are just assigning your image path to a variable called var activeRow

                    @Bhushan_Sure said in Tableview row should change on pressed in QML:

                    suppose
                    A?B:C

                    ok but you do var D = A?B:C

                    please test it and you will see

                    Rectangle {
                        property bool _isRed: false
                        color: {var c = _isRed ? "red" : "blue";}  // you return nothing, **var c** is "blue" but the rectangle no!
                    }
                    
                    Rectangle {
                        property bool _isRed: false
                        color: {var c = _isRed ? "red" : "blue";return c }  // now color will be blue
                    // or return isRed ? "red" : "blue";
                    // or isRed ? "red" : "blue";
                    }
                    
                    Bhushan_SureB Offline
                    Bhushan_SureB Offline
                    Bhushan_Sure
                    wrote on last edited by Bhushan_Sure
                    #10

                    @LeLev I think you are talking about following

                    source:
                                    {
                                        var activeRow = tableView.currentRow === styleData.row
                                        (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                                    }
                    
                    1. var activeRow = tableView.currentRow === styleData.row

                    This line (tableView.currentRow === styleData.row) will return boolean
                    value and that boolean value will get saved in var activerow.
                    2)
                    then this line
                    activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3)

                    will check if **activerow** is true then **image1** or else part.
                    **activerow** will get updated in 1)
                    
                    ODБOïO 2 Replies Last reply
                    1
                    • Bhushan_SureB Bhushan_Sure

                      @LeLev I think you are talking about following

                      source:
                                      {
                                          var activeRow = tableView.currentRow === styleData.row
                                          (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                                      }
                      
                      1. var activeRow = tableView.currentRow === styleData.row

                      This line (tableView.currentRow === styleData.row) will return boolean
                      value and that boolean value will get saved in var activerow.
                      2)
                      then this line
                      activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3)

                      will check if **activerow** is true then **image1** or else part.
                      **activerow** will get updated in 1)
                      
                      ODБOïO Offline
                      ODБOïO Offline
                      ODБOï
                      wrote on last edited by ODБOï
                      #11
                      This post is deleted!
                      1 Reply Last reply
                      0
                      • Bhushan_SureB Bhushan_Sure

                        @LeLev I think you are talking about following

                        source:
                                        {
                                            var activeRow = tableView.currentRow === styleData.row
                                            (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                                        }
                        
                        1. var activeRow = tableView.currentRow === styleData.row

                        This line (tableView.currentRow === styleData.row) will return boolean
                        value and that boolean value will get saved in var activerow.
                        2)
                        then this line
                        activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3)

                        will check if **activerow** is true then **image1** or else part.
                        **activerow** will get updated in 1)
                        
                        ODБOïO Offline
                        ODБOïO Offline
                        ODБOï
                        wrote on last edited by ODБOï
                        #12

                        @Bhushan_Sure sry i was reading this as single line expression like ...
                        my bad

                        var activeRow = tableView.currentRow === styleData.row (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                        

                        this line is actually returning

                        (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                        
                        Bhushan_SureB 1 Reply Last reply
                        1
                        • ODБOïO ODБOï

                          @Bhushan_Sure sry i was reading this as single line expression like ...
                          my bad

                          var activeRow = tableView.currentRow === styleData.row (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                          

                          this line is actually returning

                          (activeRow ? Image 1 : styleData.row % 2 ? (image 2): (image 3))
                          
                          Bhushan_SureB Offline
                          Bhushan_SureB Offline
                          Bhushan_Sure
                          wrote on last edited by
                          #13

                          @LeLev Thankyou for your inputs :) :)

                          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
                          • Unsolved