[Solved]Something really strange while trying to navigate in Grid



  • something really strange is happening with childat() I've no clue why but it begins really well then it just acts really strange I mean it selects random child griddy is Grid's Id have I found a bug guys?

    Keys.onPressed: {
            if(event.key===Qt.Key_Right){
                event.accepted=true
                griddy.childAt(index+=65,indexi+=0).focus=true
               }
            if(event.key===Qt.Key_Down){
                event.accepted=true
                griddy.childAt(index+=0,indexi+=65).focus=true
               }
        }
    

    Edited: Please use ``` (3 backticks) for code blocks - p3c0


  • Moderators

    @Zubalama childAt requires x and y coordinates. Are you sure you are passing the right coordinates ?



  • @p3c0 index:x
    index:y and I know for sure that every element is width:60... and height: 60 and spacing is 5
    and I tested it even in designer and coordinates are correct. Two days have passed still trying to figure out what's wrong


  • Moderators

    @Zubalama Maybe due to spacing the items are not found correctly.
    I made a similar code for testing. See if this is what you are trying to do:

    Grid {
        id: grid
        focus: true
        columns: 6
        spacing: 5
        Rectangle { color: focus ? "red" : "yellow"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "green"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "blue"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "cyan"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "magenta"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "pink"; width: 50; height: 50 }
    
        property int index: 0
    
        Keys.onPressed: {
            if(event.key===Qt.Key_Right){
                grid.childAt((index++)*55,0).focus=true
            }
        }
    }
    


  • @p3c0 you have only horizontal I have vertical and horizontal probably that's why?


  • Moderators

    @Zubalama Well then,

    Grid {
        id: grid
        focus: true
        columns: 3
        rows: 3
        spacing: 5
        Rectangle { color: focus ? "red" : "yellow"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "green"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "blue"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "cyan"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "magenta"; width: 50; height: 50 }
        Rectangle { color: focus ? "red" : "pink"; width: 50; height: 50 }
    
        property int xindex: -1
        property int yindex: 0
    
        Keys.onPressed: {
            if(event.key===Qt.Key_Right) {
                grid.childAt((++xindex)*55,yindex*55).focus=true
            } else if(event.key===Qt.Key_Down) {
                grid.childAt(xindex*55,(++yindex)*55).focus=true
            }
        }
    }
    

    You can just change logic as per your need.



  • I think you don't understand what's my problem I have 10 columns and 5 rows and they don't act the way they should not with spacing not even without. At first 20 navigation acts they they do well but after that they act more then strangely


  • Moderators

    @Zubalama I still think it could be more like a logical issue. May be you should post the complete minimal code which will clearly indicate the problem.
    Did you take a look at GridView ? IMO, navigation in it is far more easier.



  • @p3c0 no I had just Grid gonna try GridView now



  • @p3c0 I just realized that they begin acting strangely after focusing grid element for second time



  • I realized now :/ I did +=that ruined it I should've done just +65 everything works properly now ty P3Co


  • Moderators

    @Zubalama Good that you found it. Doesn't GridView fit in your scenario ?



  • @p3c0 it does yet I wanted to fix the problem I personally faced thanks for an advice


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.