Ajouter un élément avec QAbstractListModel
Bonjour,
Je suis en train d'implémenter un model pour mon listview, voici le code:
Code:
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
|
class ListProjectModel(QAbstractListModel):
def __init__(self, datain):
QAbstractListModel.__init__(self)
self.projects = datain
def rowCount(self, parent = QModelIndex()):
return len(self.projects)
def data(self, index, role):
if index.isValid() and role == Qt.DisplayRole:
return self.projects[index.row()].name
else:
return ""
def setData(self, index, value, role):
if not index.isValid():
return False
elif role != Qt.EditRole:
return False
self.projects[index.row()].name = value
return True
def flags(self, index):
return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable
def insertRows(self, position, rows, parent):
self.beginInsertRows(QModelIndex(), position, position + rows - 1)
for row in range(rows):
self.projects.insert(position, Project(""))
self.endInsertRows()
return True
def removeRows(self, position, rows, parent):
self.beginRemoveRows(QModelIndex(), position, position + rows -1)
for row in range(rows):
self.projects.pop(position)
self.endRemoveRows()
return True |
Maintenant quand j'implément un bouton "Add Project" pour pouvoir ajuster un élément dans mon modèle et en même temps mettre à jour ma vue:
Code:
1 2 3 4
|
def addProject(self, project):
self.model.insertRows(self.model.rowCount(), 1, QModelIndex())
self.model.setData(self.listView.currentIndex(), project.name, Qt.EditRole) |
Je ne vois pas que la vue soit modifiée,
Quelle est alors la solution pour que la vue et le model sont synchronisés?
Merci,