So legen Sie Daten in einem QAbstractTableModel fest

8

Ich muss eine Tabelle mit Qt implementieren.

Ich glaube, ich werde ein QAbstractTableModel verurteilen, mit einer QTableView, die dieses Modell verwendet.

Ich verstehe, dass ich die Funktionen rowCount (), columnCount () und data () des Modells bearbeiten muss.

Allerdings verstehe ich nicht, wie man die Daten im Modell genau einstellt, damit die Funktion data () sie abrufen kann.

Ist die Funktion setData () für diesen Zweck vorgesehen? Ich habe gesehen, dass EditRole als Parameter verwendet wird, was ich nicht möchte, da ich nicht möchte, dass meine Tabelle editierbar ist.

Also, wie setze ich Daten innerhalb des Modells oder habe ich Daten für das Modell mit der Funktion data ()?

Wie wird die Funktion data () aufgerufen, d. h. wer ruft sie an und wo müsste sie aufgerufen werden?

Bitte helfen Sie mir dabei.

Danke.

    
user1173240 07.01.2013, 03:59
quelle

1 Antwort

14

Wie die tatsächlichen Daten im Speicher gehalten, generiert oder von einem Datenspeicher abgefragt werden, liegt ganz bei Ihnen. Wenn es sich um statische Daten handelt, können Sie die Qt-Container-Klassen oder benutzerdefinierte Datenstrukturen verwenden.

>

Sie müssen die Methode setData() nur für bearbeitbare Modelle neu implementieren.

Es gibt 4 Methoden, die Sie in einer nicht editierbaren QAbstractTableModel Unterklasse implementieren müssen:

  • 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 werden in der Ansicht aufgerufen, normalerweise eine QTableView -Instanz. Die ersten beiden Methoden sollten die Dimensionen der Tabelle zurückgeben. Wenn beispielsweise rowCount() 10 zurückgibt und columnCount() 4 zurückgibt, ruft die Ansicht die Methode data() 40mal (einmal für jede Zelle) auf und fragt nach den tatsächlichen Daten in den internen Datenstrukturen Ihres Modells.

Angenommen, Sie haben in Ihrem Modell einen benutzerdefinierten Slot retrieveDataFromMarsCuriosity() implementiert. Dieser Slot füllt eine Datenstruktur und ist mit einer Instanz QPushButton verbunden, so dass Sie durch Klicken auf eine Schaltfläche neue Daten erhalten. Jetzt müssen Sie die Ansicht wissen lassen, wenn die Daten geändert werden, damit sie ordnungsgemäß aktualisiert werden kann. Deshalb müssen Sie die beginRemoveRows() , endRemoveRows() , beginInsertRows() , endInsertRows() und die zugehörigen Spalten ausgeben.

Die Qt-Dokumentation enthält alles, was Sie brauchen darüber zu wissen.

    
dschulz 07.01.2013, 05:08
quelle