Salut je veux mettre ce code:
highlight: Rectangle {
color: "black"
radius: 5
opacity: 0.7
focus: true
}
dans mouseArea dans le gestionnaire onclick:
MouseArea {
id: mouse_area1
z: 1
hoverEnabled: false
anchors.fill: parent
onClicked: {
}
C'est tout listView:
ListView {
id: listview1
x: 0
y: 82
// width: 574
// height: 967
width: window.width
height: window.height
visible: true
keyNavigationWraps: false
boundsBehavior: Flickable.DragAndOvershootBounds
opacity: 1
maximumFlickVelocity: 2500
anchors.leftMargin: 0
highlightMoveSpeed: 489
contentWidth: 0
preferredHighlightEnd: 2
spacing: 5
highlightRangeMode: ListView.NoHighlightRange
snapMode: ListView.SnapToItem
anchors.bottomMargin: 0
anchors.rightMargin: 0
anchors.topMargin: 82
anchors.fill: parent
model: myModel
delegate:Component {
//id: contactDelegate
Item {
property variant myData: model
width: 574; height: 90
Column {
x: 12
y: 0
width: 562
height: 90
anchors.rightMargin: 0
anchors.bottomMargin: 0
anchors.leftMargin: 12
anchors.topMargin: 0
anchors.fill: parent
spacing: 2
Text { text: '<b>ID: </b> ' + id_user ; verticalAlignment: Text.AlignTop; wrapMode: Text.NoWrap; horizontalAlignment: Text.AlignHCenter; color:"steelblue"; font.family: "Helvetica"; font.pointSize: 10 }
Text { text: '<b>Name: </b> ' + user_name; horizontalAlignment: Text.AlignHCenter; color:"steelblue"; font.family: "Helvetica"; font.pointSize: 10 }
Text { text: '<b>Lastname: </b> ' + user_lastname; horizontalAlignment: Text.AlignHCenter; color:"steelblue"; font.family: "Helvetica"; font.pointSize: 10 }
Text { height: 16; text: '<b>Tel number: </b> ' + user_number; verticalAlignment: Text.AlignVCenter; horizontalAlignment: Text.AlignHCenter; color:"steelblue"; font.family: "Helvetica"; font.pointSize: 10 }
Text { text: '<b>Address: </b> ' + user address; horizontalAlignment: Text.AlignHCenter; color:"steelblue"; font.family: "Helvetica"; font.pointSize: 10 }
MouseArea {
id: mouse_area1
z: 1
hoverEnabled: false
anchors.fill: parent
onClicked:
Item
{
}
}
}
}
}
//delegate: contactDelegate
highlight: Rectangle
{
color:"black"
radius: 5
opacity: 0.7
focus: true
}
}
Pour le moment, le surlignage ne fonctionne que lorsque vous utilisez des flèches, mais ce sera une application pour Android, donc j'ai besoin de toucher le même effet, et la SECOND question est de savoir comment lire certaines données de l'élément sélectionné dans Listview nom, nom de famille, numéro et adresse . Je veux mettre ces valeurs dans les boîtes d'entrée de texte.
Je vous remercie
Réponse fournie par denoth : Vous devez ajouter cette ligne:
listview1.currentIndex = index
Il semble que vous ayez besoin de deux solutions à votre question:
ListView
lorsque vous cliquez dessusLe Qt5 documentation dit ceci à propos de ListView
manipulation de la souris et du toucher:
Les vues gèrent le glissement et le glissement de leur contenu, mais elles ne gèrent pas les interactions tactiles avec les délégués individuels. Pour que les délégués réagissent à la saisie tactile, par exemple pour définir le currentIndex, un délégué MouseArea avec la logique de traitement tactile appropriée doit être fourni.
Les entrées de clé fonctionnent immédiatement, mais vous devez capturer explicitement l'événement souris/contact sur le délégué et modifier la valeur ListView.currentIndex
en fonction de la valeur index
de l'élément délégué sélectionné.
Voici un exemple complet:
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
width: 640
height: 480
visible: true
ListModel {
id: model
ListElement {
name:'abc'
number:'123'
}
ListElement {
name:'efg'
number:'456'
}
ListElement {
name:'xyz'
number:'789'
}
}
ListView {
id: list
anchors.fill: parent
model: model
delegate: Component {
Item {
width: parent.width
height: 40
Column {
Text { text: 'Name:' + name }
Text { text: 'Number:' + number }
}
MouseArea {
anchors.fill: parent
onClicked: list.currentIndex = index
}
}
}
highlight: Rectangle {
color: 'grey'
Text {
anchors.centerIn: parent
text: 'Hello ' + model.get(list.currentIndex).name
color: 'white'
}
}
focus: true
onCurrentItemChanged: console.log(model.get(list.currentIndex).name + ' selected')
}
}
Il fait les choses suivantes:
MouseArea
dans le délégué d'élément pour mettre à jour, définissez le list.currentIndex = index
qui est une variable locale et unique pour l'élément sélectionnéonCurrentItemChanged
de la ListView
pour montrer comment accéder aux valeurs de l'élément de modèle actuelPlus simple que jamais, vous pouvez utiliser: onCurrentItemChanged
ListView{
id: listViewMainMenu
signal Myselect(int playmode)
onCurrentItemChanged: Myselect(listViewMainMenu.currentIndex)
// ...
}
ListView
fournit les propriétés dites " attachées ", c'est-à-dire disponibles dans la liste delegate
. Parmi eux, Listview.view
est une référence à la liste elle-même. Il peut être utilisé pour accéder à la propriété currentIndex
et la mettre à jour. Par conséquent, pour résoudre votre problème, il suffit de:
//id: contactDelegate
.contactDelegate.ListView.view.currentIndex = index
dans le gestionnaire de variable OnClick
. Pour ceux qui utilisent la surbrillance sur un ListView avec une hauteur spécifique (étant: non rempli à 100%):
Veillez à activer la propriété clip de ListView, sinon la surbrillance sera toujours visible en dehors des bordures de ListView lors du défilement.
ListView
{
clip: true
}
Comme discuté ici: Masquer la surbrillance d’un ListView lors du défilement