Bonjour a tous
Depuis 2 jours je coince sur ce probleme en apparence tout bete, mais la j'avoue que je cale...
J'ai une QTableView, associee a un QSqlTableModel.
Le modele est regle sur OnFieldChange, afin que mes modifications via la GUI soient propagees directement dans la base.
La consequence de ce choix, c'est qu'a chaque modification que j'effectue via setData, le modele est raffraichi et je perds ma selection courante.
J'ai donc essaye de sauver l'etat de selection avant l'ecriture, afin de le restaurer juste apres.
Si j'ai une seule ligne selectionnee lors de l'ecriture, elle est bien restauree.
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 def refreshRow(self, task_id, t, val): record = self.model.record() ii = record.indexOf("id") # on detecte la colonne "id" ids = set() # on memorise les ids des taches selectionnees for index in self.select.selectedRows(): ids.add(self.model.data(index)) # la modif du champ elle-meme for i in xrange(self.model.rowCount()): index = self.model.index(i, ii) if self.model.data(index) == task_id: j = record.indexOf(t) index = self.model.index(i, j) if t == "size": val = int(val) self.model.setData(index, val) # pour chaque ligne, on verifie si la task_id est parmi celles memorisees, et si oui on selectionne for i in xrange(self.model.rowCount()): index = self.model.index(i, ii) if self.model.data(index) in ids: self.select.select(index, QtGui.QItemSelectionModel.SelectCurrent | QtGui.QItemSelectionModel.Rows)
Si j'en ai plusieurs, une seule uniquement reste selectionnee a la fin.
Mon probleme semble se situer au niveau de ma derniere ligne, mais j'ai beau lire la documentation, ca devrait marcher non ?
Partager