En Qt, puedo obtener el selected text
de a QComboBox
usando el
combobox->currentText()
método. ¿Cómo puedo conseguirlo selected value
?
Busqué ayuda pero no pude encontrar un método currentData()
que esperaba encontrar. Solo pude encontrarcombobox->currentIndex()
¿Hay alguna forma más inteligente de hacerlo que no sea combobox->itemData(combobox->currentIndex())
?
Actualización: esto ya no es necesario a partir de Qt 5. Se currentData()
ha agregado un método http://doc.qt.io/qt-5/qcombobox.html#currentData-prop
combobox->itemData(combobox->currentIndex())
es ilegal! Por qué ?currentIndex = -1
. Devolverá los datos del último índice o generará un error si QComboBox está vacío.Este puede obtener el texto del índice actual:
fuente
currentText
es lo que el OP ya tiene conocimiento ...puede configurar los datos de QVariant para todos los elementos, luego puede obtener el valor cuando lo necesite.
hay un código de ejemplo para esta situación:
ui.comboBoxSheetSize->addItem("128 m", QVariant(128)); ui.comboBoxSheetSize->addItem("256 m", QVariant(256)); ui.comboBoxSheetSize->addItem("512 m", QVariant(512)); ui.comboBoxSheetSize->addItem("1024 m", QVariant(1024)); ... void Page::onComboSheetSizeChanged( int index ) { int value = ui.comboBoxSheetSize->itemData(index).toInt(); }
por cierto, creo que entendí mal tu pregunta. Creo que la forma en que obtienes datos es lo suficientemente inteligente.
fuente
La función miembro QComboBox :: currentData se ha agregado desde que se hizo esta pregunta, vea esta confirmación
fuente
Tuve el mismo problema
Yo he resuelto por
fuente
Este es mi código OK en QT 4.7:
//add combobox list QString val; ui->startPage->clear(); val = "http://www.work4blue.com"; ui->startPage->addItem(tr("Navigation page"),QVariant::fromValue(val)); val = "https://www.google.com"; ui->startPage->addItem("www.google.com",QVariant::fromValue(val)); val = "www.twitter.com"; ui->startPage->addItem("www.twitter.com",QVariant::fromValue(val)); val = "https://www.youtube.com"; ui->startPage->addItem("www.youtube.com",QVariant::fromValue(val)); // get current value qDebug() << "current value"<< ui->startPage->itemData(ui->startPage->currentIndex()).toString();
fuente
Me sorprende que no haya una señal activada y tengo el mismo problema. Lo resolví haciendo una subclase de QComboBox. Creo que es mejor evitar tener que acceder directamente al objeto y llamar a sus funciones porque eso significa un acoplamiento más estrecho y va en contra de la filosofía de Qt. Así que aquí está la clase que hice y que funciona para mí.
class SmartComboBox : public QComboBox { Q_OBJECT private slots: void triggerVariantActivated(int index); public: SmartComboBox(QWidget *parent); signals: void activated(const QVariant &); };
Y la implementación
void SmartComboBox::triggerVariantActivated(int index) { activated(itemData(index)); } SmartComboBox::SmartComboBox(QWidget *parent) :QComboBox(parent) { connect(this, SIGNAL(activated(int)), this, SLOT(triggerVariantActivated(int))); }
fuente
Tuve el problema y
resuelto esto.
fuente
si está desarrollando complementos de QGIS, simplemente
fuente
hice esto
QDir path("/home/user/"); QStringList _dirs = path.entryList(QDir::Dirs); std::cout << "_dirs_count = " << _dirs.count() << std::endl; ui->cmbbox->addItem(Files); ui->cmbbox->show();
Verá con esto que la QStringList llamada _dirs está estructurada como una matriz a cuyos miembros puede acceder a través de un índice hasta el valor devuelto por _dirs.count ()
fuente
La pregunta es vieja, pero tal vez alguien necesite una respuesta real.
En QGIS 3.4, puede obtener el valor del
QComboBox
métodocurrentData()
.Ejemplo:
comboBox.currentData()
Enlace: https://doc.qt.io/qt-5/qcombobox.html#currentData-prop
fuente
Sé que llego muy tarde, pero para aquellos que todavía tienen ese problema, se puede resolver fácilmente. Yo uso Qt 5.3 y funciona bien. No es necesario crear una función o todo eso.
int valueComboBox; valueComboBox = comboBox->currentIndex();
y funciona ! Espero eso ayude !
fuente
Confirmo que la forma más fácil es hacer esto:
uiAnalyseAssets::AnalyseAssets(QWidget *parent) : QWidget(parent) { ui.comboBox->addItem("text1"); ui.comboBox->addItem("text2"); ... } void mainFunction::yourFunction( int index ) { int value = ui.comboBox->currentText(); }
fuente
QComboBox::currentText()
devuelve unQString
? ¿Cómo se llega a un sensatoint
? ¿Y qué quieres hacer con tu parámetroint index
?