QComboBox e QMap



  • ciao!

    sto cercando di riempire una QComboBox con una QMap.
    riesco nell'intento, ma ho una problema con il recupero della chiave della voce selezionata.
    mi spiego, questo codice mi riempie la QComboBox:

    DialogAdd::DialogAdd(QWidget *parent) : QDialog(parent), ui(new Ui::DialogAdd) {
        ui->setupUi(this);
    
        QMap<QString, QString> syncMap;
        syncMap.insert("*", "Scegli");
        syncMap.insert("CMD", "TESTO");
        ui->comboBox->addItems(QStringList(syncMap.values()));
    
        connect(ui->btnSalva, &QPushButton::clicked, this, &DialogAdd::getSync);
    }
    
    void DialogAdd::getSync() {
        qDebug() << ui->comboBox->currentIndex();
        qDebug() << ui->comboBox->currentText();
    }
    

    al click sul bottone ottento giustamente questo:

    0
    "Scegli"
    

    come posso ottenere la chiave di quel valore selezionato (in sostanza l'asterisco nel primo caso)??
    l'unica cosa che mi viene in mente è iterare sulla QMap fino a che non trovo il valore selezionato, ed estrapolare la chiave.
    ma mi sembra macchinoso.
    suggerimenti??


  • Qt Champions 2018

    syncMap va fuori scope alla fine del costruttore quindi non esiste piu' quando premi il bottone.

    Ignorando quell'aspetto, ti basta usare (syncMap.cbegin()+ui->comboBox->currentIndex()).key()



  • @VRonin said in QComboBox e QMap:

    syncMap va fuori scope alla fine del costruttore quindi non esiste piu' quando premi il bottone.

    Ignorando quell'aspetto, ti basta usare (syncMap.cbegin()+ui->comboBox->currentIndex()).key()

    ok, ho spostato la mappa a livello di classe (in effetti è corretto come dici te) ed usato il tuo codice di esempio.
    mi sembra funzionare tutto!

    grazie!


Log in to reply