2013-10-17 15 views
10

Ho un semplice widget QComboBox, che ha 2 valori all'interno: True e False. E ho una variabile QString currValue, che è uno di quei valori. Voglio impostare il valore corrente del mio widget con currValue.Imposta elemento selezionato per QComboBox

Ho pensato che la soluzione fosse la seguente: prima consente di inizializzare currValue; QString currValue = "False";

QComboBox* combo = new QComboBox(); 
combo->addItem("True"); 
combo->addItem("False"); 
combo->setCurrentIndex(combo->findData(currValue)); 

Ma non funziona. Sto facendo qualcosa di sbagliato? E perché QComboBox non ha membro setCurrentItem() o smth così?

risposta

22

hai veramente bisogno di scriverlo nel modo seguente:

QComboBox* combo = new QComboBox(); 
combo->addItem("True", "True"); 
combo->addItem("False", "False"); 
combo->setCurrentIndex(combo->findData("False")); 

Il problema nell'implementazione era che non hai impostato le voci userData, ma solo testo. Nello stesso tempo hai cercato di trovare l'articolo con il suo userData che era vuoto. Con la specifica implementazione, utilizzo semplicemente il secondo argomento della funzione QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())) che imposta l'elemento utente (QVariant).

UPDATE:

Il modo alternativo per trovare l'elemento casella combinata è l'impostazione del ruolo specifico come secondo argomento per QComboBox::findData() funzione. Se non si desidera impostare in modo esplicito i dati dell'utente, è possibile fare riferimento agli elementi testi con Qt::DisplayRole la bandiera, vale a dire:

QComboBox* combo = new QComboBox(); 
combo->addItem("True"); 
combo->addItem("False"); 
combo->setCurrentIndex(combo->findData("False", Qt::DisplayRole)); // <- refers to the item text 

UPDATE 2:

Un'altra alternativa potrebbe essere utilizzando la ricerca basata su testo funzione QComboBox::findText():

QComboBox* combo = new QComboBox(); 
combo->addItem("True"); 
combo->addItem("False"); 
combo->setCurrentIndex(combo->findText("False")); 
+0

Perché?! Qual è il significato di 2 argomenti uguali ?? –

+0

@KarenTsirunyan, ho aggiornato la mia risposta con maggiori dettagli. – vahancho

+0

Vedo. Ma in questo caso penso che sia confuso che se ho solo dei testi e non ho bisogno di dati, devo impostare anche i dati quando aggiungo nuovi elementi. Penso che DEVE essere il modo più semplice per impostare selezionato, il testo che ho. –

3

ho avuto risposta alla mia domanda.

combo->setCurrentIndex(combo->findText(currValue)); 
Problemi correlati