ItemDelegate nur für bestimmten Index setzen?

Alles rund um die Programmierung mit Qt
Antworten
pfotenpo
Beiträge: 33
Registriert: 17. Februar 2008 15:07

ItemDelegate nur für bestimmten Index setzen?

Beitrag von pfotenpo »

Hallo,

also ich habe ein QTableView mit einem zugehörigem QStandardItemModel erstellt. Daran will ich Delegates verweden. So wie aus der Dokumentation ersichtlich wird, kann ich einen Delegate entweder für das gesamte Model, für eine ganze Zeile oder eine ganze Spalte setzen.
Gibt es denn keine Möglichkeit einen bestimmten Delegate nur an eine Position (row, column) zu setzen??? So das ich am Ende in meiner Tabelle meinetwegen auch 3 verschiedene Delegates in einer Zeile nebeneinander habe!

DANKE.
abelmi
Beiträge: 16
Registriert: 19. Februar 2007 14:56

Beitrag von abelmi »

So eine Funktion vermisse ich auch.

Die einzige Möglichkeit sehe ich in einem ItemDelegateProxy, der für bestimmte Zellen den eigenen speziellen ItemDelegate aufruft und für alle anderen Zelllen den standard QItemDelegate.

Du musst einfach folgende Methoden überschreiben:

Code: Alles auswählen

    virtual void paint ( QPainter                   * painter, 
                         const QStyleOptionViewItem & option,
                         const QModelIndex          & index ) const;
    virtual QWidget * createEditor( QWidget                    * parent,
                                    const QStyleOptionViewItem & option,
                                    const QModelIndex          & index) const;
    void setEditorData ( QWidget * editor, const QModelIndex & index ) const;
    void setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const;
Speichern kannst du die ItemDelegates in einer Map vom Typ QMap<QModelIndex(), QAbstractItemDelegate*>
pfotenpo
Beiträge: 33
Registriert: 17. Februar 2008 15:07

Beitrag von pfotenpo »

für so einen ItemDelegateProxy gibts aber keine bereits vorhandene Klasse von Qt, richtig? Hab keine gefunden. Ich müsste also die Methoden des QItemDelegate überschreiben?

Kann ich den selbst erstellten ItemDelegate auch unterschiedliche EditorWidgets anzeigen lassen? (abhängig davon, was in einer Tabelle zum Beispiel eine Spalte daneben für ein Wort steht (int/string/bool)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Kann ich den selbst erstellten ItemDelegate auch unterschiedliche EditorWidgets anzeigen lassen? (abhängig davon, was in einer Tabelle zum Beispiel eine Spalte daneben für ein Wort steht (int/string/bool)
Aber sicher doch, wurde hier im Forum auch schon öfters erwähnt...
Antworten