Wie muss ich eine QML ListView erstellen damit diese sich so verhält wie eine QListView? Damit meine ich Elemente auswählen (hinterlegung beim Klicken) und bei einem Klick den index des geklickten Elements ermitteln



  • Hallo an alle,

    da ich neu in Qt QML bin und ich es selbst auch nach mehreren Suchen bei Google nichts gefunden habe wende ich mich nun an euch. Hoffe Ihr habt eine Lösung.

    Wie kann ich bei einer QML ListView es erreichen das ich nach einem Klick auf einen Eintrag der geklickte Eintrag markiert wird? Bis jetzt habe ich es nur erreicht das ich den ersten Eintrag markiert bekomme. Wenn ich jedoch auf einen weiteren Klicke passiert nichts.

    Weiterhin muss es auch funktionieren das ich den index des geklickten Eintrags ermitteln kann aber das bekomme ich auch alleine nicht gelöst.

    Hier nun mein bestehender Code:

    ListView {
            id: jobsListView
            x: 259
            y: 38
            width: 268
            height: 730
            
            //model: wird in QML-Datei definiert
            delegate: Text {
                text: modelData
            }
            highlight: Rectangle {
                color: "lightsteelblue"
                radius: 5
            }
            focus: true
        }
    

    Würde mich über Hilfe sehr freuen.

    Grüße
    Sven


  • Moderators

    hi @sm-a

    jedes delegate item hat ein einzigartiges index Attribut. Das kannst du nutzen um entsprechende Eintrag zu highlighten und zu identifizieren, welches Item angeklickt wurde.

    z.B.:

    ListView{
       id: view
    
       delegate: Rectangle{
           width: view.width
           height: 50
    
           color: index == view.currentIndex ? "lightsteelblue" : "white" //Blauer hintergrund wenn ausgewählt 
    
         Text{
            anchors.fill: parent
             text: modelData
        }
         MouseArea {
             anchors.fill:parent
    
             onClicked: console.log("Index von geklicktem Item:", index)
            //eventuell, wenn die MouseArea das nicht an den view weiterleiten sollte, musst du hier auch den aktuellen Index manuell setzen. aka: view.currentIndex = index
         }
       }
    
    }
    


  • Hi @J-Hilk vielen vielen Dank. Das hat mir sehr weitergeholfen und es funktioniert jetzt dank Deiner Hilfe.

    Eine schöne neue Woche wünsche ich Dir.

    Grüße
    Sven


Log in to reply
 

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