QComboBox mit Model: wie auf Selektion zugreifen?

Alles rund um die Programmierung mit Qt
Antworten
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

QComboBox mit Model: wie auf Selektion zugreifen?

Beitrag von phlox81 »

Moin, also ich habe eine QComboBox, welche ich über setModel mit Daten versorge.
Klappt auch wunderbar, allerdings ist im Hintergrund eine Datenbank, so das ich eigentlich nicht bei der Auswahl den Text will, sondern dessen ID, welcher über das Model ja auch erhältlich wäre.

Mit currentIndex erhalte ich aber wohl nur den Index der ComboBox, mit currentText den selektierten String.

Daher die Frage, komme ich irgendwie an die ID des selektierten Wertes über das Model heran?
Oder dient das Model hier nur zum Füllen der Box?
Gibt es evtl. hierfür ein anderes besseres Widget als die QComboBox?
russkij
Beiträge: 57
Registriert: 14. Dezember 2005 11:57

Beitrag von russkij »

dein View hat auch ein selectionModel, der sollte dir weiter helfen

hilft das weiter?

QModelIndexList selectedIndexes = myView.selected.indexes();
QStandardItemModel *model = dynamic_cast<QStandardItemModel*>(combo->model());

schliefe ...
QModelIndex index = selectedIndexes.at(i);
QStandardItem *myItem = model->itemFromIndex(index);
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

Also das Hilft nur Bedingt weiter, weil ich die Models hier nur zum Zugriff auf die Daten nutze.
Einen eigentlichen View auf das Modell gibt es nicht, die Auswahl ist ja in der QComboBox.
Welche ich mit setModel halt mit Daten versorge.

Aber, moment, QComboBox hat ein view(), da komme ich an ein SelectionModel heran, mal sehen...

falls mal jemand das auch machen muss, so gehts:

Code: Alles auswählen

QModelIndexList mil = m_ui->cbx_source->view()->selectionModel()->selectedIndexes();
    QModelIndex mi = mil.at(0);
    QSqlRecord sr = graphdb_sql::SQLModel::instance().Getnodes()->record(mi.row());
Getnodes() gibt ein QSqlTabelModel* zurück.

Würde das auch einfacher gehen? :lol:
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

void   activated ( int index )
void   currentIndexChanged ( int index )
void   highlighted ( int index )
Der zurückgelieferte index ist immer die row im Model. Somit braucht man keine View, kein SelectionModel usw. sondern nur die QComboBox und das Model.
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

Ähm, das sind alles Methoden die nix zurückgeben.
Sicher auf ein entsprechendes Signal zu hören ist auch nicht schlecht, aber bringt mich momentan nicht weiter.
Ich will ja gerade von der ComboBox wissen, was im Model das nun ist.
Würde currentIndex() denn hier den korrekten row des Models zurückgeben?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ja, da sich alle index-Angaben auf die row beziehen.
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

upsala hat geschrieben:Ja, da sich alle index-Angaben auf die row beziehen.
großartig. thx :)
Antworten