Pregunta

En Qt, puedo conseguir la selected text de un QComboBox mediante el uso de la método combobox->currentText(). ¿Cómo puedo obtener la selected value

He buscado en busca de ayuda, pero no pude encontrar un método que currentData() que esperaba encontrar. Sólo pude encontrar combobox->currentIndex()

¿Hay una forma más inteligente de hacerlo que no sea combobox->itemData(combobox->currentIndex())?

Actualización: Esta ya no es necesario como de Qt 5. Un método currentData() se ha añadido http://doc.qt.io/qt-5/qcombobox.html#currentData-prop

¿Fue útil?

Solución

Parece que hay que hacer combobox->itemData(combobox->currentIndex()) si desea obtener los datos actuales de la QComboBox.

Si usted está utilizando su propia clase derivada de QComboBox, puede agregar una función currentData().

Otros consejos

Esto se puede conseguir el texto del índice actual:

QString cb = cbChoice ->currentText();

puede configurar los datos QVariant para todos los elementos, entonces se puede obtener el valor cuando lo necesite.

hay un código de ejemplo de 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 no he entendido bien su pregunta. Creo que la forma en que recibe los datos es lo suficientemente inteligente?

La función QComboBox miembro :: CURRENTDATA se ha añadido desde que se hizo esta pregunta, consulte este cometer

tuve misma edición

He resuelto por

value = self.comboBox.currentText()
print value

Este es mi código Aceptar 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();

Me sorprende que no hay una señal de activado y tiene el mismo problema. Lo resuelto haciendo una subclase de QComboBox. Creo que es mejor evitar tener que acceder directamente al objeto y llamar a sus funciones debido a que los medios de acoplamiento más apretado y va en contra de la filosofía de Qt. Así que aquí está la clase que hice 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 aplicación

void SmartComboBox::triggerVariantActivated(int index)
{
    activated(itemData(index));
}

SmartComboBox::SmartComboBox(QWidget *parent)
:QComboBox(parent)
{
    connect(this, SIGNAL(activated(int)), this, SLOT(triggerVariantActivated(int)));
}

Yo tenía el problema y

QString str = m_UI->myComboBox->currentText();

resuelto este.

si está desarrollando plugins de QGIS entonces simplemente

self.dlg.cbo_load_net.currentIndex()

Lo hice

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();

Usted verá con esto que el QStringList llamado _dirs está estructurado como una matriz cuyos miembros se puede acceder a través de un índice hasta el valor devuelto por _dirs.count ()

Sé que soy muy tarde pero para aquellos que todavía tiene ese problema, se puede resolver fácilmente. Yo uso de Qt 5.3 y funciona bien. No es necesario crear una función o todo eso.

int valueComboBox;
valueComboBox = comboBox->currentIndex();

y funciona! Espero que ayude!

confirmo 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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top