return self.rowCount()
@pyqtSlot(int, str, result=bool)
def insert(self, row, value):
return self.insertRows(row, 1) and \
self.setData(self.createIndex(row, 0), value,
Qt.EditRole)
@pyqtSlot(str, result=bool)
def append(self, value):
return self.insert(self.count, value)
@pyqtSlot(int, result=str)
def get(self, index):
if self._file is None:
return None
return self._data[index]
# Gestion d'un fichier.
@pyqtProperty(str)
def file(self):
return self._file
@file.setter
def file(self, value):
self._file = value
if os.path.isfile(self._file) and os.path.getsize(self._file)
> 0:
with open(self._file, 'r') as f:
self._data = json.load(f)
else:
self._just_created = True
self._data = []
@pyqtProperty(bool)
def justCreated(self):
return self._just_created
# Autre méthode utile sur le modèle :
# retrouver l'indice d'un genre donné.
@pyqtSlot(str, result=int)
def findIndexByName(self, value):
return [i for i in range(len(self._data)) if self._data[i] ==
value][0]
Avant d'utiliser ce modèle dans l'application, Qt Quick oblige à enregistrer ce nouveau
type, c'est-à-dire indiquer qu'il existe un module FileModel (tout comme QtQuick ou
QtQuick.Controls) qui fournit un type (nommé FileStringListModel) implémenté
par une classe (ici, aussi FileStringListModel). Cette opération est effectuée par la
fonction qmlRegisterType(ClassePython, "Module", VersionMajeure,
388
Précédent

- 389/494

Suivant