Festlegen der Filteroption in QTableWidget

8

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

    
john 22.07.2011, 03:54
quelle

2 Antworten

15

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%     
Chris 22.07.2011, 04:00
quelle
15

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:

  1. Verwenden Sie QTableView anstelle von QTableWidget .
  2. Unterklasse 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.
  3. Erstellen Sie eine QSortFilterProxyModel und setModel() der QTableView darauf.
  4. setSourceModel() Ihrer QSortFilterProxyModel für Ihr Unterklassenmodell.
  5. Legen Sie die Zeichenfolge, nach der gefiltert werden soll, mit 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.

    
kevlar1818 22.07.2011 14:02
quelle

Tags und Links