QComboBox in QTreeView

Alles rund um die Programmierung mit Qt
Antworten
mugi
Beiträge: 30
Registriert: 7. Juli 2011 18:12

QComboBox in QTreeView

Beitrag 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 ?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: QComboBox in QTreeView

Beitrag von upsala »

Du könntest der QComboBox die Daten einer Qt::UserRole+n geben und das Model entsprechende Daten ausliefern lassen.
mugi
Beiträge: 30
Registriert: 7. Juli 2011 18:12

Re: QComboBox in QTreeView

Beitrag 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.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: QComboBox in QTreeView

Beitrag 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;
mugi
Beiträge: 30
Registriert: 7. Juli 2011 18:12

Re: QComboBox in QTreeView

Beitrag von mugi »

klappt wunderbar, Vielen Dank :D
Antworten