Wir haben eine QSortFilterProxyModel
auf einem QTableView
und zwei installiert (oder mehr) QLineEdit
zum Filtern der Ansicht (basierend auf dem Text dieser QLineEdit
s)ändern QSortFilterProxyModel Verhalten für mehrere Spaltenfilterung
Unserer Ansicht nach haben wir einen Schlitz Das sagt uns die Zeile von lineedits und die aktuelle Spalte, die wir wollen. Etwas wie dieses:
void onTextChange(int index, QString ntext) {
filter.setFilterKeyColumn(index);
filter.setFilterRegExp(QRegExp(ntext, Qt::CaseInsensitive));
}
Auf der ersten Spalte haben wir Namen in der Sekunde, die wir Jahr des Geburtstages haben.
Jetzt geben wir ein Jahr für Spalte 2 ein (zum Beispiel 1985). Bis jetzt ist das Filtern in Ordnung, aber wenn wir zum ersten lineedit wechseln und einen Namen eingeben (zum Beispiel john), wird die vorherige Filterung basierend auf Jahr zurückgesetzt. Wie können wir dieses Verhalten für unsere benutzerdefinierte QSortFilterProxyModel
ändern?
(Eigentlich, wenn wir die Filter KeyColumn die filtermodel Filter ändern müssen vorhandene Ansicht zurückgesetzt es nicht)
Update ...
Basierend auf @ Mike Antwort: Wenn Sie mit unbekannter Spaltenanzahl der Interaktion QMap<int, QRegExp>
mit wird Ihnen helfen
Sie können nur 2 Proxy-Modelle übereinander schichten. Eine für den Namen eine andere für das Jahr. und abhängig davon, welche Zeile Sie ändern, ändern Sie den entsprechenden Filter. – Hayt