initialBooks = [{'title': "Commentarii de Bello Gallico",
'author': "Caius Iulius Caesar"…}, {…}]
if __name__ == "__main__":
engine = QQmlApplicationEngine()
engine.rootContext().setContextProperty("initialGenres",
initialGenres)
engine.rootContext().setContextProperty("initialBooks",
initialBooks)
Ensuite, côté Qt Quick, la seule chose à faire est de récupérer ces deux variables lors
de l'initialisation de la base de données et de réécrire les requêtes SQL en les utilisant
(plutôt que d'utiliser des requêtes fixes). Par exemple, pour les genres :
function openDB(initialGenres, initialBooks) {
// …
tx.executeSql('INSERT INTO genres (genre) VALUES ' +
initialGenres.map(function(val) {
return "(\"" + val + "\")";
}).join(", ") + ";");
// …
Note > La liste des genres pourrait très bien être directement utilisée dans
l'application en tant que modèle. Cependant, l'interaction entre Qt Quick et Python
ne se déroule pas de la manière la plus intuitive qui soit : aucune mise à jour n'est
reportée de l'autre côté. Pour ce faire, il vaut mieux passer par une classe qui
s'inscrit dans la hiérarchie des modèles de PyQt ou par un composant qui expose des
propriétés (au sens de PyQt).
384
'author': "Caius Iulius Caesar"…}, {…}]
if __name__ == "__main__":
engine = QQmlApplicationEngine()
engine.rootContext().setContextProperty("initialGenres",
initialGenres)
engine.rootContext().setContextProperty("initialBooks",
initialBooks)
Ensuite, côté Qt Quick, la seule chose à faire est de récupérer ces deux variables lors
de l'initialisation de la base de données et de réécrire les requêtes SQL en les utilisant
(plutôt que d'utiliser des requêtes fixes). Par exemple, pour les genres :
function openDB(initialGenres, initialBooks) {
// …
tx.executeSql('INSERT INTO genres (genre) VALUES ' +
initialGenres.map(function(val) {
return "(\"" + val + "\")";
}).join(", ") + ";");
// …
Note > La liste des genres pourrait très bien être directement utilisée dans
l'application en tant que modèle. Cependant, l'interaction entre Qt Quick et Python
ne se déroule pas de la manière la plus intuitive qui soit : aucune mise à jour n'est
reportée de l'autre côté. Pour ce faire, il vaut mieux passer par une classe qui
s'inscrit dans la hiérarchie des modèles de PyQt ou par un composant qui expose des
propriétés (au sens de PyQt).
384
