QRegExp im QSortFilterProxyModel um Einträge rauszufiltern

Alles rund um die Programmierung mit Qt
Antworten
DarkSchwabe
Beiträge: 23
Registriert: 7. Juli 2008 11:57

QRegExp im QSortFilterProxyModel um Einträge rauszufiltern

Beitrag von DarkSchwabe »

Hallo,

ich versuche seit geraumer Zeit in einem "QSortFilterProxyModel" zeilen mit bestimmten Begriffen herauszufiltern. Das wollte ich elegant mit "QRegExp" machen.

Zum Beispiel kann ich mit "(zeile|zahl)" alle Einträge finden die "Zeile" oder "Zahl" enthalten.
Wie kann ich nun aber alle Einträge anzeigen OHNE alles was "Zeile" oder "Zahl" enthällt? Ich habe bei der Internet Recherche einige Möglichkeiten gefunden, die aber alle im QT nicht funktionieren oder falsch sind. Drum schreib ich die hier erstmal auch nicht :-)

Vielleicht weiß ja jemand wie ich das anstellen kann. Wenns mit QRegExp nicht geht, wär ich auch für einen anderen Lösungsweg dankbar.

Gruß
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Aus der Doku zu QRegExp:
^ The caret negates the character set if it occurs as the first character (i.e. immediately after the opening square bracket). [abc] matches 'a' or 'b' or 'c', but [^abc] matches anything but 'a' or 'b' or 'c'.
DarkSchwabe
Beiträge: 23
Registriert: 7. Juli 2008 11:57

Beitrag von DarkSchwabe »

hmm okay. Vielleicht hätt ich doch schreiben sollen was ich versucht habe.
Die Doku hab ich auch gelesen, auch wenn ich nicht alles zu QRegExp verstanden habe.

"^" habe ich auch versucht, ging aber nicht. Zum einen müsste dann ja "[^a-zA-Z]" alles was Buchstaben hat weglassen (geht nicht) und zum anderen weiß ich nicht wie es dann mit Wörter-Listen gehen sollte "(^zeile|^zahl)" ?

Eine andere Möglichkeit von der ich gelesen habe ist "?!".
Also in etwa "(?!zeile|?!zahl)". Tut aber auchnicht.

Hatte denn noch niemand das selbe Szenario?

Ich bin gerade dabei, ein weiteres mal meine ganze Tabellenkonstruktion zu überprüfen. Nicht dass ich da noch einen anderen Fehler habe.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QSortFilterProxyModel ist eigentlich gleich überladen und

Code: Alles auswählen

virtual bool filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const
ist eigentlich auch gleich überschrieben...
DarkSchwabe
Beiträge: 23
Registriert: 7. Juli 2008 11:57

Beitrag von DarkSchwabe »

Hoi upsala,
erstmal danke für die Antwort. Hätte da 2 Fragen.

Was meinst du mit Überladen? Was soll ich da zu welchem Zweck überladen? Da steh ich leider auf dem Schlauch.

Und was das überschreiben von "filterAcceptsRow" angeht, da müsste ich ja dann erstmal QSortFilterProxyModel ableiten und eine neue Klasse basteln, da ich die Klasse an anderer Stelle auchnoch verwende. Diese würden nach überschreiben von "filterAcceptsRow" nicht mehr richtig funktionieren. Das sehe ich doch richtig oder?
Das kann ich natürlich machen (ist zumindest mal ein Weg *G*) aber macht man da so? Also nur weil ich diese eine Funktion überschreiben will eine neue Klasse erstellen/ableiten?
Es wäre doch sauberer, wenn ich rausbekommen würde wie ich die regulären Ausdrücke entsprechend nutzen kann oder?

Bin mir selber leider oft nicht sicher was die sauberste und "schulbuchmäßigste" Lösung wäre.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Mit einer RegEx ist dies nicht möglich. Alles andere sind C++-Grundlagen...
Antworten