QComboBox mit Model: wie auf Selektion zugreifen?


  • Mod

    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?



  • Du kannst ein Item beim Einfügen mit User-Daten versehen (Link). Dort solltest du die zum Text passende ID ablegen. Mit QComboBox::itemData kommst du dann wieder an die ID.


  • Mod

    Nee, ich hab ja gerade ein Model was die Daten in das ComboBox einträgt.
    currentIndex() liefert den korrekten Row der im Model ausgewählt wurde zurück.

    Im Code sieht das so aus:

    QSqlRecord source_sr = graphdb_sql::SQLModel::instance().Getnodes()->record(m_ui->cbx_source->currentIndex());
    


  • an die einzelnen Spalten eines QSqlRecord kommst du mittels QSqlRecord::value, ungefähr so:

    int id = source_sr.value("ID").toInt();
    // oder ...
    int id = source_sr.value(0).toInt();
    

    Je nachdem, ob du die Spalten per Index oder Name ansprechen möchtest.



  • phlox81 schrieb:

    Daher die Frage, komme ich irgendwie an die ID des selektierten Wertes über das Model heran?

    Achja, du kommst natürlich auch direkt an die Daten des Models, und zwar mittels QAbstractItemModel::data. So beschaffen sich zB auch die Views die Daten des Models. Dazu musst du dir aber erstmal einen Index basteln. Ich gehe aber mal davon aus, dass die komplette Zeile (ID, Name, usw.) in einem Record steht, also holst du dir die ID besser aus dem Record ...


Anmelden zum Antworten