c++ - guia - QComboBox: establece el elemento seleccionado en función de los datos del artículo
qgis manual (3)
Busca el valor de los datos con findData y luego usa setCurrentIndex
QComboBox* combo = new QComboBox;
combo->addItem("100",100.0); // 2nd parameter can be any Qt type
combo->addItem .....
float value=100.0;
int index = combo->findData(value);
if ( index != -1 ) { // -1 for not found
combo->setCurrentIndex(index);
}
¿Cuál sería la mejor manera de seleccionar un elemento en un cuadro combinado QT de una lista predefinida de valores únicos basados en enum?
En el pasado, me he acostumbrado al estilo de selección de .NET donde el elemento se puede seleccionar estableciendo la propiedad seleccionada al valor del elemento que desea seleccionar:
cboExample.SelectedValue = 2;
¿Hay alguna forma de hacerlo con QT basado en los datos del artículo, si los datos son una enumeración C ++?
Si conoce el texto en el cuadro combinado que desea seleccionar, simplemente use el método setCurrentText () para seleccionar ese elemento.
ui->comboBox->setCurrentText("choice 2");
De la documentación de Qt 5.7
El setter setCurrentText () simplemente llama a setEditText () si el cuadro combinado es editable. De lo contrario, si hay un texto coincidente en la lista, currentIndex se establece en el índice correspondiente.
Por lo tanto, siempre que el cuadro combinado no sea editable, el texto especificado en la llamada a la función se seleccionará en el cuadro combinado.
Referencia: http://doc.qt.io/qt-5/qcombobox.html#currentText-prop
También puede echar un vistazo al método findText (const QString & text) de QComboBox; devuelve el índice del elemento que contiene el texto dado, (-1 si no se encuentra). La ventaja de utilizar este método es que no necesita establecer el segundo parámetro cuando agrega un elemento.
Aquí hay un pequeño ejemplo:
/* Create the comboBox */
QComboBox *_comboBox = new QComboBox;
/* Create the ComboBox elements list (here we use QString) */
QList<QString> stringsList;
stringsList.append("Text1");
stringsList.append("Text3");
stringsList.append("Text4");
stringsList.append("Text2");
stringsList.append("Text5");
/* Populate the comboBox */
_comboBox->addItems(stringsList);
/* Create the label */
QLabel *label = new QLabel;
/* Search for "Text2" text */
int index = _comboBox->findText("Text2");
if( index == -1 )
label->setText("Text2 not found !");
else
label->setText(QString("Text2''s index is ")
.append(QString::number(_comboBox->findText("Text2"))));
/* setup layout */
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(_comboBox);
layout->addWidget(label);