respecter le protocole de QAbstractTableModel, on doit invoquer la méthode
beginInsertRows avec les indices de début et de fin des lignes insérées; ici, il n'y
a qu'une nouvelle ligne : elle a pour indice le nombre de livres avant ajout (comme
en Python, les indices commencent à zéro) ; on termine avec endInsertRows, qui
signale la mise à jour aux vues concernées ;
supprimeLivre : on supprime de la liste le livre de l'indice donné ; à nouveau,
suivant un protocole similaire, on invoque beginRemoveRows et endRemoveRows ;
remplaceLivre : on remplace le livre de l'indice donné par un nouveau livre ; pour
signaler cela aux vues concernées, on émet un signal dataChanged ; il faut spécifier
la plage d'indices des éléments susceptibles d'avoir changé : depuis (indiceLivre,0)
jusque (indiceLivre,2), comme on ne touche qu'une seule ligne et qu'il y a trois
colonnes.
À présent que le modèle a été muni des fonctions de mise à jour, on est prêt à enrichir
la classe MainWindowBiblio pour appeler ces fonctions en réponse aux événements
clics sur boutons ou activations de menus.
Attention > Pour qu'il n'y ait pas d'ambiguïté dans ce qui suit, vous devez bien
comprendre la distinction faite — arbitrairement, il est vrai — entre les termes
"sauvegarder" et "enregistrer" : le bouton Sauvegarder sert à placer un nouveau
livre dans la liste à partir des champs de saisie ou à mettre à jour un livre existant à
partir de ces mêmes champs, le menu Enregistrer, quant à lui, sert à sauvegarder la
liste complète sur fichier.
Voici l'implémentation revue et complétée de la classe MainWindowBiblio.
# -*- coding: utf-8 -*# main_windows_biblio.py
from PyQt5.QtCore import pyqtSlot, QDate
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QFileDialog
from Ui_main_window_biblio import Ui_MainWindowBiblio
from modele_biblio import Livre, ModeleTableBiblio
class MainWindowBiblio(QMainWindow, Ui_MainWindowBiblio):
121
Précédent

- 122/494

Suivant