Seite 1 von 1

ItemDelegate nur für bestimmten Index setzen?

Verfasst: 31. März 2008 13:39
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.

Verfasst: 31. März 2008 15:58
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*>

Verfasst: 31. März 2008 16:41
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)

Verfasst: 31. März 2008 16:43
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...