Seite 1 von 1

QComboBox in QTreeView

Verfasst: 27. Juli 2011 15:40
von mugi
Hallo,
ich habe einen QTreeView mit viele Zeilen und Spalten, der seine Daten von einem QAbstractItemModel bekommt.
In einer der Spalten habe ich einen QComboBox Implementiert. (Ich habe das Beispiel der Docu: SpinBox-Delegate als Muster genommen und für QcomboBox angepasst)
So weit so gut. Was ich aber wissen wollte ist: wie kann man das delegate so ändern dass für jede Zeile, der Drop-down-menü was anders zeigt ?

Code: Alles auswählen

QComboBox *editor = new QComboBox(parent);
QStringList list ;
list << "a" << "b" << "c" << ">" << "d" ;
editor->addItems(list);
return editor;
Das hier ist mein bisheriges code für die createEditor methode, jetzt werden alle zeile mit einen QComboBox vorgesehen der die Items "a b c d" besitzt, was ich aber erreichen will ist, dass zum Beispiel Zeile 1 die Items "a b c" hat, und zeile 2 die Items "q b 1 f..." hat, und so weite.
Ist so etwas überhaupt möglich ?

Re: QComboBox in QTreeView

Verfasst: 27. Juli 2011 15:51
von upsala
Du könntest der QComboBox die Daten einer Qt::UserRole+n geben und das Model entsprechende Daten ausliefern lassen.

Re: QComboBox in QTreeView

Verfasst: 27. Juli 2011 16:00
von mugi
Vielen Dank für die Antwort, aber Ich verstehe nicht so ganz was du meinst !
meine methode create editor sieht so aus:

Code: Alles auswählen

QWidget *ComboDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &index ) const
{
     if (index.column()==4)
     {
        QComboBox *editor = new QComboBox(parent);
        QStringList list ;
        list << "a" << "b" << "c" << "d";
        editor->addItems(list);
        return editor;
     }
     ...
     }
könntest du mir bitte genau sagen wie ich die UserRole Daten empfangen kann ?
Vielen Dank.

Re: QComboBox in QTreeView

Verfasst: 27. Juli 2011 16:38
von archer
Du willst grob gesagt, in jeder Zeile deines Treeviews unterschiedliche Einträge in der jeweiligen Combobox haben?
Dann könntest du z.B. in deinem Modell in der data(..) Methode soetwas in der Art machen:

Code: Alles auswählen

if (aRole == Qt::UserRole)
{
    QStringList Values;
    switch (acrindex.row())
    {
        case 0:
             Values << "a" << "b" << "c" << "d";
             break;
        case 1:
             Values << "q" << "b" << "1" << "f";
             break;        
        ...
    }
    return Values;
}
..und in deinem Delegate:

Code: Alles auswählen

QComboBox *editor = new QComboBox(parent);
editor->addItems(acrIndex.data(Qt::UserRole).toStringList());
return editor;

Re: QComboBox in QTreeView

Verfasst: 27. Juli 2011 19:45
von mugi
klappt wunderbar, Vielen Dank :D