Cacher le point culminant D'une ListView en faisant défiler
je construis une application Qt5 basée sur Qt-Quick 2 pour L'UI. J'ai un problème lors de l'affichage d'une ListView avec une évidence composant. Quand je fais défiler le ListView, le rectangle de surlignage est visible à l'extérieur du ListView et je ne trouve pas de moyen de l'éviter.
voici un exemple de problème avec un fichier QML minimal:
import QtQuick 2.0
Rectangle {
width: 360; height: 600
ListView {
width: 350; height: 200
anchors.centerIn: parent
id: myList
model: myModel
highlight: highlightBar
delegate: Item {
width: 400; height: 20
Text { text: name }
MouseArea {
id: mArea
anchors.fill: parent
onClicked: { myList.currentIndex = index; }
}
}
}
Component {
id: highlightBar
Rectangle {
width: parent.width; height: 20
color: "#FFFF88"
}
}
ListModel {
id: myModel
}
/* Fill the model with default values on startup */
Component.onCompleted: {
for(var i = 0; i < 100; i++) {
myModel.append({ name: "Big Animal : " + i});
}
}
}
est-il possible de "limiter" un composant à ses bordures parentes ou de masquer le composant de surbrillance pendant le défilement?
1 réponses
tel que rapporté par la documentation :
Note: Views ne pas activer le clip automatiquement . Si la vue n'est pas clippée par un autre élément ou par l'écran, il sera nécessaire de régler clip: true pour que les éléments out of view soient bien clippés.
par conséquent, ce que vous éprouvez est un comportement commun et vous devriez soit 1) clip la vue via autre Item
s (par exemple un en-tête Rectangle
et un pied de page Rectangle
avec z:infinite
ou simplement définir la propriété clip
à true
, c'est-à-dire
ListView{
//...
clip:true
//...
}
Clipping a quelque Perfomance disavantages qui peuvent affecter grandement l'application comme il se développe. Par conséquent, son utilisation, en particulier en dehors du scénario des vues, doit être évaluée avec soin.