Vorbild Muster 8

Die QSortFilterProxyModel-Klasse stellt ein Filtermodell bereit, das ziemlich vielseitig ist und in einer Vielzahl gängiger Situationen verwendet werden kann. Für fortgeschrittene Benutzer kann QSortFilterProxyModel unterklassifiziert werden, was einen Mechanismus bereitstellt, mit dem benutzerdefinierte Filter implementiert werden können. QIdentityProxyModel-Instanzen sortieren oder filtern nicht die Struktur des Quellmodells, sondern stellen eine Basisklasse zum Erstellen eines Datenproxys bereit. Dies kann auf einem QFileSystemModel nützlich sein, um z. B. verschiedene Farben für die BackgroundRole für verschiedene Dateitypen bereitzustellen. Das schreibgeschützte Modell zeigt, wie einfach die Auswahl für den Benutzer dargestellt werden könnte, aber für viele Anwendungen ist ein bearbeitbares Listenmodell viel nützlicher. Wir können das schreibgeschützte Modell ändern, um die Elemente editierbar zu machen, indem wir die data()-Funktion ändern, die wir schreibgeschützt implementiert haben, und indem wir zwei zusätzliche Funktionen implementieren: flags() und setData(). Die folgenden Funktionsdeklarationen werden der Klassendefinition hinzugefügt: Ein Delegat prüft, ob ein Element vor dem Erstellen eines Editors bearbeitet werden kann. Das Modell muss den Delegaten darüber informieren, dass seine Elemente bearbeitet werden können.

Wir tun dies, indem wir die richtigen Flags für jedes Element im Modell zurückgeben. In diesem Fall aktivieren wir alle Elemente und machen sie sowohl wählbar als auch editierbar: Der hier implementierte Delegate verwendet eine QSpinBox, um Bearbeitungsmöglichkeiten bereitzustellen, und ist hauptsächlich für die Verwendung mit Modellen gedacht, die ganze Zahlen anzeigen. Obwohl wir zu diesem Zweck ein benutzerdefiniertes ganzzahlbasiertes Tabellenmodell eingerichtet haben, hätten wir stattdessen problemlos QStandardItemModel verwenden können, da der benutzerdefinierte Delegat die Dateneingabe steuert. Wir erstellen eine Tabellenansicht, um den Inhalt des Modells anzuzeigen, und dies verwendet den benutzerdefinierten Delegaten für die Bearbeitung. Beachten Sie, dass das Modell in der Regel Implementierungen der Funktionen QAbstractItemModel::insertRows() und QAbstractItemModel::setData() bereitstellen muss. Diese Klassen verwenden das Modell-/Ansichtsentwurfsmuster, bei dem die zugrunde liegenden Daten (im Modell) von der Art und Weise getrennt gehalten werden, wie die Daten vom Benutzer (in der Ansicht) dargestellt und bearbeitet werden. In der Modell-/Ansichtsarchitektur ruft die Ansicht Datenelemente aus dem Modell ab und stellt sie dem Benutzer vor. Die Art und Weise, wie die Daten dargestellt werden, muss nicht der Darstellung der vom Modell bereitgestellten Daten ähneln und kann sich vollständig von der zugrunde liegenden Datenstruktur unterscheiden, die zum Speichern von Datenelementen verwendet wird. Modellindizes stellen temporäre Verweise auf Informationen bereit und können zum Abrufen oder Ändern von Daten über das Modell verwendet werden. Da Modelle ihre internen Strukturen von Zeit zu Zeit neu organisieren können, können Modellindizes ungültig werden und sollten nicht gespeichert werden. Wenn ein langfristiger Verweis auf eine Information erforderlich ist, muss ein persistenter Modellindex erstellt werden. Dies bietet einen Verweis auf die Informationen, die das Modell auf dem neuesten Stand hält.

Temporäre Modellindizes werden von der QModelIndex-Klasse und persistente Modellindizes von der QPersistentModelIndex-Klasse bereitgestellt. Der Versuch, ein benutzerdefiniertes Modell Muster zu machen – 8 “x 24”. Im Folgenden ist der Inhalt der PAT-Datei aufgeführt. Ich habe es ausprobiert und ich erhalte die Meldung “Keine “Modell”-Typmuster gefunden.” Jede Idee über den Code in der PAT-Datei. Das Modell muss zunächst sicherstellen, dass der Vorgang durchgeführt werden sollte, die bereitgestellten Daten in einem Format vorliegen, das verwendet werden kann, und dass sein Ziel innerhalb des Modells gültig ist: Die Verwendung des MVC-Musters in Webanwendungen explodierte nach der Einführung der NetObjects von NeXT im Jahr 1996, die ursprünglich in Objective-C geschrieben wurde (die stark von Smalltalk entlehnt war) und half, MVC-Prinzipien durchzusetzen.