Bonjour,

j'ai un delegate qui me permet d'afficher une liste déroulante dans un tableau :

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
class AssignmentDelegate(QtGui.QItemDelegate):
 
    def __init__(self, owner):
        QtGui.QItemDelegate.__init__(self, owner)
 
        #On charge TOUTES la table "Categories" dans le model
        self.modelAssignment = QSqlTableModel(self)
        self.modelAssignment.setTable("Assignments")
        self.modelAssignment.select()
 
 
    def createEditor(self, parent, option, index):
        text = index.data(QtCore.Qt.DisplayRole).toString()
        editor = QtGui.QComboBox(parent)
        editor.setModel(self.modelAssignment);
        editor.setModelColumn(self.modelAssignment.fieldIndex("name"))
        indexCat = editor.findText(unicode(text))
        editor.setCurrentIndex(indexCat)
        editor.installEventFilter(self)         
        return editor
 
    def setEditorData(self, editor, index):
        value = index.data(QtCore.Qt.DisplayRole).toString()
        indexAss = editor.findText(unicode(value))
        editor.setCurrentIndex(indexAss)
 
    def setModelData(self,editor,model,index):
        value = editor.currentIndex()
        myIndex = self.modelAssignment.index(value, 0)
        assignmentId = self.modelAssignment.data(myIndex, 0).toInt()[0]
        #Enregistrement
        model.setData(index, QtCore.QVariant(assignmentId))
 
        #En cas de virement, on doit mettre à jour les deux enregistrements.
        row = index.row()
        if model.index(row, 14).data().toInt()[1] == True:
            idVirement = model.index(row, 14).data().toInt()[0]
            query = QSqlQuery()
            query.exec_('UPDATE Operations\
                         SET assignment_id = \"'+str(assignmentId)+'\"\
                         WHERE (virement_id = '+str(idVirement)+')')
            #print query.lastError().text()
        ####################################################################
Et j'ai une méthode pour supprimer (dans un autre widget) des item de la liste déroulante.

Une fois supprimé, je recharge le delegate du tableau pour qu'il actualise les liste et que l'item supprimé n'apparaisse plus.
Le truc c'est que si j'actualise le delegate
Code : Sélectionner tout - Visualiser dans une fenêtre à part
self.parent.tableView.setItemDelegateForColumn(6,PlacementDelegate(self))
apres j'ai une erreur Segmentation fault: 11 des que j'affiche le fameux tableau.

Quelqu'un peut-il m'expliquer comment faire différemment? je ne comprend pas bien l'erreur… Ou bien comment éviter cette erreur?

Merci d'avance