Bonjour,

Je viens de commencer le QML et je dois avouer que je suis un peu perdu.
Je crée mon main avec une listview que je rempli, je peux aussi supprimer (pas de soucis jusque la) mais lors du lancement je souhaiterais selectionner le deuxieme ligne dans la liste (j'ai vu sur le net : setCurrentIndex) mais je suis dans le flou total avec tout ce que je lis a propos des models.

Si quelqu'un pouvait m'expliquer comment faire pour selectionner une ligne dans ma liste se serait sympa. De plus je commence alors si vous avez des critiques je suis preneur parce que c'est au début qu'il faut prendre de bonnes habitudes ;o)
Et si vous connaissez un bon tutoriel pour ce système de model je suis aussi preneur.

Merci,

Edit :

Lorsque je lance j'ai le message d'erreur alors que normalement c'est bien un listview et non un item (print(win.findChild(QObject, "listview22").setCurrentIndex(2)))

AttributeError: 'QQuickItem' object has no attribute 'setCurrentIndex'


Dans le main.qml
Code QML : Sélectionner tout - Visualiser dans une fenêtre à part
Main_ListView{objectName: "lstGroupe"; id:lstGroupe; pyModel: ModelGroupe; pyClass: ModelGroupe}

Le Main_ListView
Code QML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import QtQuick.Window 2.2
 
Rectangle {
	property var pyClass: 0
	property var pyModel: 0
 
 
	border.color: "red"
	Layout.fillWidth: true
	height:150
 
 
	ListView {
		anchors.topMargin: 10
		anchors.bottomMargin: 10
		anchors.leftMargin: 10
		anchors.fill: parent
 
		id: listview22
		objectName: "listview22"
 
		model: pyModel
		clip: true 														// --- Empeche la surbrillance de sortir du cadre
 
		delegate: Component {
			Item {
				width: 200
				height: 20
 
				property int item_id: iid
 
				Row {
					Text {
						anchors.verticalCenter: parent.verticalCenter
 
						width: 60
						text:  "  " + libelle
					}
				}
 
				MouseArea {
					anchors.fill: parent
					onClicked{
                                                list.currentIndex = index
                                                pyClass.onClickItem(item_id)                                            
                                        }
				}				
 
			}
		}
		highlight: Rectangle {color: '#CDCDCD'}
		focus: true		
	}
 
	Button {
		anchors.bottom: parent.bottom              
		anchors.right: parent.right
		anchors.rightMargin: 5
		anchors.bottomMargin: 5
 
		width: 28
		height: 25
 
		iconSource: "ico/math-add-icon.png"
 
		onClicked{
                        //console.log("qml adding")
                        pyClass.onClickInsert(22, "aluis")
                }
	}
 
}

Main.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from PyQt5.QtCore import QAbstractListModel, Qt, pyqtSignal, pyqtSlot, QModelIndex    
 
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView
 
from PyQt5.QtGui import *#QGuiApplication, QColor, QStandardItemModel, QStandardItem
from PyQt5.QtQml import *#QQmlApplicationEngine, QQmlComponent
from PyQt5.QtCore import *#QUrl, Qt, QCoreApplication, QAbstractListModel, QModelIndex, QTimer, qsrand, qrand, QTime, QObject
from PyQt5.QtQuick import *#QQuickItem
 
 
 
class gGroupe(QAbstractListModel):
 
 
	iid = Qt.UserRole + 1
	libelle = Qt.UserRole + 2
 
	data_change = pyqtSignal()
 
	def __init__(self, parent=None):
 
		super().__init__(parent)
 
		self.liste = []
		self.insert_list()
 
		self.liste2 = {}
 
		self.createIndex(0,0,125)
		self.sort(1, order = Qt.DescendingOrder)
 
 
	# ------------------------------------------------------------------
 
	def roleNames(self):
		return {
			gGroupe.iid: b'iid',
			gGroupe.libelle: b'libelle',
		}
 
	def data(self, index, role=Qt.DisplayRole):
		row = index.row()
		if role == gGroupe.iid:
			return self.liste[row]["iid"]
		if role == gGroupe.libelle:
			return self.liste[row]["libelle"]
 
	def rowCount(self, parent=QModelIndex()):
		return len(self.liste)
 
	# ------------------------------------------------------------------
 
	def insert_list(self):
 
		self.liste = [
			{'iid': 10, 'libelle': 'groupe10'},
			{'iid': 11, 'libelle': 'groupe11'},
			{'iid': 12, 'libelle': 'groupe12'},
		]
 
 
	def delete(self, row):
		self.beginRemoveRows(QModelIndex(), row, row)
		del self.liste[row]
		self.endRemoveRows()  
 
	def delete_all(self):
		self.beginRemoveRows(QModelIndex(), 0, len(self.liste))
		del self.liste[row]
		self.endRemoveRows()  
 
	def select(self):
		pass
 
        @pyqtSlot(int, str)
	def onClickInsert(self, iid=10, libelle='toto'):
 
		self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount())
		self.liste.append({'iid': iid, 'libelle': libelle})
		self.endInsertRows()
 
		return self.index(len(self.liste)-1)
 
        @pyqtSlot(int)
	def onClickItem(self, iid):
		print(iid)
 
	"""
        @pyqtSlot(int, str, int)
        def editPerson(self, row, name, age):
                ix = self.index(row, 0)
                self.persons[row] = {'iid': 22, 'name': name, 'age': age}
                self.dataChanged.emit(ix, ix, self.roleNames())
        """
 
 
class MainWindow(QObject):
	def __init__(self, parent=None):
		super().__init__(parent)
 
		self.g_groupe = gGroupe()
		engine.rootContext().setContextProperty('ModelGroupe', self.g_groupe)
 
		"""
        app = QApplication(sys.argv)
        engine = QQmlApplicationEngine()
        # Création d'un objet QQmlContext pour communiquer avec le code QML
        ctx = engine.rootContext()
        engine.load('groupe_upd.qml')
        win = engine.rootObjects()[0]
        py_mainapp = MainApp(ctx, win)
        """
 
		engine.load('main.qml')
		win = engine.rootObjects()[0]
 
		print(win.findChild(QObject, "listview22").setCurrentIndex(2)) #j'ai fait pleins de test pour acceder a mon Listviewx mais il ne veux rien entendre
 
		a = win.findChild(QObject, "PersonModel")#.removeRows( 0, model.rowCount() )
 
 
if __name__ == "__main__":
	app = QApplication(sys.argv)
	engine = QQmlApplicationEngine()
	# Création d'un objet QQmlContext pour communiquer avec le code QML
	#ctx = engine.rootContext()
	py_mainapp = MainWindow()
	sys.exit(app.exec())