Wie gesetzt Daten in einer QAbstractTableModel
Ich implementieren müssen, um eine Tabelle mit Qt.
Ich glaube, ich werde verklagt eine QAbstractTableModel, mit einem QTableView mit diesem Modell.
Verstehe ich ich werde zu Bearbeiten rowCount(), columnCount () und data () - Funktionen des Modells.
Allerdings verstehe ich nicht, wie genau die Daten in das Modell, so dass die Daten () - Funktion können Sie abrufen..
Ist die setData () - Funktion für diesen Zweck vorgesehen? Ich habe gesehen, es dauert EditRole als parameter, die ich auch nicht möchte, da ich nicht möchte, dass meine Tabelle bearbeitet werden.
So, wie kann ich die "set" - Daten in das Modell, oder haben Daten für das Modell zu bekommen, mit data () - Funktion?
Auch, wie die data () - Funktion aufgerufen, D. H., wer ruft es und wo würde es aufgerufen werden müssen?
Bitte helfen Sie mir mit diesem.
Dank.
- Dank für, die. Hat mir sehr geholfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie die eigentlichen Daten werden im Speicher gehalten, erzeugt oder abgefragt werden, die aus einem datenspeicher, ist völlig bis zu Ihnen. Wenn es sich um statische Daten, die Sie verwenden können, die Qt-container-Klassen oder benutzerdefinierte Datenstrukturen.
Müssen Sie nur implementieren Sie die
setData()
Methode für Bearbeitbare Modelle.Gibt es 4 Methoden, die Sie implementieren müssen, um in einem nicht editierbaren
QAbstractTableModel
Unterklasse:int rowCount()
int columnCount()
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole )
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole)
Diese Methoden aufgerufen werden, von der Sicht, in der Regel eine
QTableView
Instanz. Die ersten beiden Methoden sollte den Dimensionen der Tabelle. Zum Beispiel, wennrowCount()
zurück10
undcolumnCount()
zurück4
werden, die Ansicht berufen sich auf diedata()
Methode 40 mal (einmal für jede Zelle) Fragen, für die eigentlichen Daten, die in Ihrem Modell die internen Datenstrukturen.Als ein Beispiel angenommen, Sie haben implementiert eine benutzerdefinierte slot
retrieveDataFromMarsCuriosity()
im Modell. Dieser slot fügt eine Daten-Struktur und ist mit einQPushButton
Instanz, so erhalten Sie neue Daten, die durch klicken auf eine Schaltfläche.Nun, Sie müssen lassen Sie die Aussicht wissen, Wann die Daten wird geändert, so kann es richtig aktualisiert. Das ist, warum Sie abgeben müssen, um die
beginRemoveRows()
,endRemoveRows()
,beginInsertRows()
,endInsertRows()
und Ihre Spalte Kollegen.Den Qt-Dokumentation hat alles, was Sie wissen müssen über dieses.
insertRows()
. Rufen SiebeginInsertRows()
vor dem hinzufügen der Artikel zu Ihrem Modell die Daten-container (sei es einQList
oder was auch immer container-Klasse, die Sie verwenden). Beachten Sie, dass "Daten geändert" nicht unbedingt bedeutet, dass Zeilen oder Spalten Hinzugefügt oder entfernt werden.dataChanged()
bedeutet, dass die Daten in vorhandene Elemente in das Modell wurde aktualisiert, sodass der Blick abrufen können, die Aktualisierung der Daten. Denk nur, was passiert, wenn Sie korrigieren Sie Ihre Namen in eine editierbareQTableView
Zelle.beginInsertRows()
undendInsertRows()
beim einfügen von Elementen in der Modell-datenspeicher während der Initialisierung des Modells, speziell wenn Sie noch nicht angebracht, das Modell auf einen Blick noch.dataChanged()
funktioniert für jede Art von dtaa ändern withinthe bestehenden Modells, D. H. eine mögliche Veränderung in der Anzahl von Zeilen und Spalten, und eine änderung innerhalb der bestehenden? Ich hatte dieses Problem, wo neue Zeilen eingefügt werden, aber die " dataChanged ()` - signal war vielleicht nicht vermitteln die gleiche, da keine neuen Zeilen eingefügt werden können, meiner Ansicht nach, nur die vorhandenen Daten innerhalb der Zeilen, die, wenn verändert, würde sich ändern in der Ansicht.Brauchen Sie nicht zu verwenden
setData(...)
. Stattdessen, Sie brauchen, um eine UnterklasseQAbstractTableModel
in einer Weise, dass Ihre MethodenrowCount()
,columnCount()
,data(index)
und potenziellheaderData(section, horizontalOrVertical)
Gegenzug die Daten, die Sie anzeigen möchten. Hier ist ein Beispiel, basierend auf PyQt5:Es ist aus diesem GitHub-repository und zeigt die folgende Tabelle: