Verständnisproblem QAbstractItemModel

Alles rund um die Programmierung mit Qt
Antworten
Artemus
Beiträge: 15
Registriert: 14. Januar 2012 16:50

Verständnisproblem QAbstractItemModel

Beitrag von Artemus »

Hallo,

ich habe gerade ein Problem den Ausgangspunkt für eine aktuelle Aufgabenstellung zu finden.
Was ich machen möchte ist ein paar Daten in einem TreeView darzustellen bzw. zu editieren. Allerding ist die Darstellungsform Abhängig von dem jeweiligen Datensatz.

Hier mal ein Bild um das zu veranschaulichen:
Bild
Wie man sieht soll die Spalte "Value" sowohl dezimalzahlen, eine Checkbox oder dropdown Menü verwenden um den eigentlichen Wert darzustellen bzw. zu verändern (hexwerte in 0x... Notation sind auch vorgesehen).
Ich habe mir schon mal einen struct gebaut so wie ich die Daten im Speicher hinterlegen will:

Code: Alles auswählen

typedef struct{
    uint8          au8_Name[255];
    uint32         u32_value;
    uint8          u8_pos;
    uint8          u8_length;
    uint32         u32_resetvalue;
    EN_DISPLAYTYPE en_displaytype;
    QStringList*   qp_dropdown_options;
}ST_REGISTER_OPTION;
EN_DISPLAYTYPE gibt dabei die Darstellungsform an.

Die Daten liegen dann in einem eindimensionalem Array z.B.

Code: Alles auswählen

ST_REGISTER_OPTION ast_register[MAX_REG_COUNT];
So, nun muss ich ja einen "Übersetzer" bauen um meinen struct in einem Treeview darzustellen.
Bin ich da prinzipiell mit einem Subclass von QAbstractItemModel gut beraten?
Und schreibe ich dann eine Klasse die alle 5 Spalten von Name bis Value darstellt oder muss ich für die ersten 4 Felder eine Standardklasse nehmen und meine eigene kümmert sich nur um das Value Feld?
Wie bringe ich dem ganzen bei wo und wie meine Daten liegen?
nebler
Beiträge: 51
Registriert: 9. Juli 2009 15:26

Re: Verständnisproblem QAbstractItemModel

Beitrag von nebler »

Hallo,

also wenn es um eine flache Datenstruktur geht, würde ich mir eher QAbstractTableModel genauer anschauen.
Das Model selbst stellt allerdings nicht den Editor zur Verfügung, das macht das QItemDelegate.

Um das Beispiel, das Du aufzeigst, allerdings zu imitieren, würde ich folgende Lösung vorschlagen:

Code: Alles auswählen

class MyTableWidget : public QTableWidget {
  Q_OBJECT
public:
  void setData( const ST_REGISTER_OPTION& in ) {
     // write to widget
     switch( in.en_displayType ) {
     case CheckBox:        
        setCellWidget( row, col, new QCheckBox() );
        break;
     }
  }

  ST_REGISTER_OPTION getData() const {
    // read from widget ...
  }
};
Mir ist nicht bekannt, wenn man von QAbstractItemModel / QItemDelegate ableitet, dass das Editor Widget dann dauerhaft dargestellt wird.
Sonst hätte Qt wohl selbst nicht eine Methode 'setCellWidget' eingeführt.

Viele Grüße
Artemus
Beiträge: 15
Registriert: 14. Januar 2012 16:50

Re: Verständnisproblem QAbstractItemModel

Beitrag von Artemus »

Die flache Datenstruktur ist erst einmal für den Anfang gedacht, später sollte es schon mal eine Art Baum werden. Ich schau mir deinen Vorschlag mal genauer an, sieht schon mal sehr gut aus. Den Baum könnte ich auch durch simple Buttons mit Stylesheet ersetzen. Habe maximal 3 Ebenen.
Antworten