Seite 1 von 1

Implementierung einer Suche in Model/View-Architektur

Verfasst: 16. August 2010 13:06
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

Verfasst: 16. August 2010 13:19
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  

Verfasst: 16. August 2010 13:58
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

Verfasst: 16. August 2010 13:58
von philistion
Vielen vielen Dank, diese Funktion hab ich völlig übersehen. Sieht gut aus!