Pregunta

¿Cuál sería la mejor manera de seleccionar un elemento en un cuadro combinado QT fuera de una lista predefinida de valores únicos basados ??enum.

En el pasado se han acostumbrado al estilo de .NET de selección en el que el elemento se puede seleccionar mediante el establecimiento de la propiedad seleccionada para el valor del elemento que desee seleccionar:

cboExample.SelectedValue = 2;

¿Hay alguna forma de hacer esto con QT basado en los datos del elemento, si los datos son una enumeración de C ++?

¿Fue útil?

Solución

buscar el valor de los datos con findData() y luego usar 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);
}

Otros consejos

También puede echar un vistazo a la FINDTEXT método (QString y texto) desde QComboBox; devuelve el índice del elemento que contiene el texto dado, (-1 si no encontrado). La ventaja de usar este método es que no es necesario para establecer el segundo parámetro cuando se 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);

Si conoce el texto en el cuadro combinado que desea seleccionar, sólo tiene que utilizar el método setCurrentText () para seleccionar ese elemento.

ui->comboBox->setCurrentText("choice 2");

A partir de la documentación de Qt 5.7

  

El setCurrentText colocador () llama simplemente setEditText () si el combo   cuadro es editable. De lo contrario, si hay un texto coincidente en la lista,   currentIndex se establece en el índice correspondiente.

Así que, mientras el cuadro combinado no se puede editar, el texto especificado en la llamada de función será seleccionado en el cuadro combinado.

Referencia: http://doc.qt.io/qt -5 / qcombobox.html # currentText-prop

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top