Implementierung einer Suche in Model/View-Architektur

Alles rund um die Programmierung mit Qt
Antworten
philistion
Beiträge: 22
Registriert: 8. Februar 2010 09:37

Implementierung einer Suche in Model/View-Architektur

Beitrag von philistion »

Hallo,

ich stehe vor folgendem Problem: Ich verwende ein QSqlQueryModel als Datenbankmodel zum Zugriff auf eine SQLite Datenbank. Angezeigt werden die Daten in einem QTableView.
Nun möchte ich, dass man von der GUI aus nach Datensätzen suchen kann, was ich im Moment mit einer extra dafür erstellten QSqlQuery ("SELECT * FROM ....") mache. Ich bekomme dann zwar ein Ergebnis, also z.B. einen QSqlRecord, weiß aber dann nicht wie ich weiterkomme.

Im QTableView möchte ich dass die gefundenen Elemente ausgewählt bzw. farblich markiert werden, am einfachsten also mit einem QItemSelectionModel.
Dieses verlangt aber den QModelIndex des zu selektierenden Elements.

Gibt es eine Möglichkeit von meiner extra erstellten QSqlQuery, oder aber auch von einem extra erstellten QSqlQueryModel (denn das eigentliche Model darf ich nicht anrühren, daran soll sich ja nichts ändern) auf einen QModelIndex zu kommen, den ich dem QItemSelectionModel übergeben kann?

Sollte dies nicht möglich sein, wäre ich auch für andere Ansätze, wie man mit QSqlQueryModel und QTableView einerseits die Daten behalten kann, andererseits aber nach bestimmten Einträgen suchen kann, die man dann im View hervorhebt.

Ich dachte dass mein Ansatz der einfachste ist, aber vielleicht liege ich da ja falsch.

Vielen Dank schon mal im Voraus!

mfG
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Damit kann man doch schon suchen:

Code: Alles auswählen

QModelIndexList QAbstractItemModel::match ( const QModelIndex & start, int role, const QVariant & value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags( Qt::MatchStartsWith | Qt::MatchWrap ) ) const  
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

Ich persönlich finde es - gerade in großen Tabellen - etwas unübersichtlich, wenn gefundene Einträge einfach nur markiert werden. Ich bevorzuge es, die Anzeige auf die gefundenen Einträge zu reduzieren und benutze dafür QSortFilterProxyModel.

Gruß Michael
philistion
Beiträge: 22
Registriert: 8. Februar 2010 09:37

Beitrag von philistion »

Vielen vielen Dank, diese Funktion hab ich völlig übersehen. Sieht gut aus!
Antworten