In meiner Anwendung habe ich QtableWidget
mehrere Zeilen anzeigen, Zeile bearbeiten, um Zeichenfolge eingeben und Schaltfläche drücken, Anforderung sagt beim Klicken auf die Schaltfläche Same QTableWidget
sollte nur die Zeilen anzeigen, die Zeichenfolge in Zeile bearbeiten eingegeben haben
Ich dachte daran, QSortFilterProxy
Model zu verwenden, aber QTableWidget
hat setModel(...)
method private, sodass ich in diesem Fall QSortFilterProxy
Model nicht verwenden kann. Bitte lassen Sie mich wissen, wie Sie die Filter-Option in QTable Widget implementieren
Das Verwenden eines sort / filter-Proxy ist dafür wahrscheinlich sowieso zuviel.
Sie müssen alle Ihre QTableWidgetItem-Objekte durchlaufen und feststellen, ob ihr Text dem Filter entspricht und QTableView :: setRowHidden () aufrufen, falls erforderlich.
Zum Beispiel:
%Vor%Ich empfehle dringend, dies folgendermaßen zu tun! So soll es in Qt gemacht werden.
Sehen Sie sich das Lernprogramm zur Qt-Modell- / Ansichtsprogrammierung an. Das Problem ist, dass QTableWidget eine Convenience-Klasse ist, die das Model / View-Zeug für Sie versteckt. In Ihrem Fall können Sie die von Qt bereitgestellte Model / View-Struktur nicht ignorieren (oder nicht).
Was Sie tun müssen:
QTableView
anstelle von QTableWidget
. QAbstractItemModel
und implementieren data()
(zum Lesen), und alle anderen Funktionen benötigen Sie von der Dokumentation . Dies ist der schwierigste Teil, aber beziehen Sie sich auf den obigen Link für eine Anleitung, wie Sie dies tun können. QSortFilterProxyModel
und setModel()
der QTableView
darauf. setSourceModel()
Ihrer QSortFilterProxyModel
für Ihr Unterklassenmodell. setFilterFixedString()
oder setFilterRegExp()
in QSortFilterProxyModel
fest
Lass es mich wissen, wenn das hilft. Das ist viel professioneller und auf lange Sicht elegant, als wenn man alle Elemente in Ihrem Tisch durchläuft.
Tags und Links qt