How to Use a QSqlQueryModel in QML/it
Come usare QSqlQueryModel in QML
Il software che ho sviluppato, Photo Parata, è un applicazione client server che usa come backend sql. Per la maggior parte del tempo i dati da visualizzare di Photo Parata displays richiedono alcune joins. Per questo motivo,i modelli sono derivati da QSqlQueryModel, non QSqlTableModel.
In questa guida, vi guiderà attraverso le fasi della creazione di un modello personalizzato per QML, derivato da QSqlQueryModel.
Voglio ringraziare Christophe Dumez [cdumez.blogspot.com] per il suo blog How to use C++ list model in QML [cdumez.blogspot.com]. Grazie a questo blog che sono riuscito a mettere insieme le seguenti cose:
(La sorgente dei dati per questo esempio è stato preso da uno degli esempi di Sql che viene fornito con Qt, examples\sql\masterdetail [doc.qt.nokia.com])
Fase 1: Creare una classe C++ derivata da QSqlQueryModel:
Tutta la magia avviene nel costruttore e nei dati del metodo overload().
Fase 2: Implementare due costanti statiche
Ho sempre due variabili costanti statiche in ciascuno dei miei modelli che derivano da QSqlQueryModel, COLUMN_NAMES e SQL_SELECT. L’ordine dei nomi delle colonne in COLUMN_NAMES deve corrispondere l’ordine in cui sono elencati nella SELECT
Fase 3: Settare roleNames nel costruttore
Questa fase è dove tutta la magia accade realmente. Il QML farà riferimento alle varie colonne con le roleNames nomi ruolo impostata sul modello.
Fase 4: Implementare il metodo data():
Finché il ruolo che viene richiesto non è un ruolo utente, restituisce il valore predefinito. Ma se il ruolo è un ruolo utente, riporta la colonna corretta:
Fase 5: Abilitare QML a riconoscere il modello:
Create un istanza del modello (prendete nota che il costruttore del modello deve interrogare il DB la prima volta). Poi settatelo come proprietà sul contenuto della vista, in questo caso l’ho chiamato artistModel:
Fase 6: Creare la lista QML e delegati
Poiché il modello è stato esposto alla fase 5, il modello esiste e può essere usato in QML. Semplicemente settate il modello della ListView con il nome usato nella fase 5.
E infine l’implementazione del delegato. Si noti come i nomi indicati nella roleModel vengono utilizzati come i valori da associare alla proprietà Text degli oggetti di testo:
ArtistItemDelegate.qml
Tutti i miei esempi in Qt si possono trovare a questo indirizzo. http://www.miltonstreet.com/qt/ [miltonstreet.com]