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

En el pasado me he acostumbrado .NETO del estilo de la selección, donde el elemento puede ser seleccionado a través de la propiedad seleccionada para el valor del elemento que desea seleccionar:

cboExample.SelectedValue = 2;

Es de todos modos hay que hacerlo con QT basada en el elemento de datos, si los datos de C++ enumeración?

InformationsquelleAutor cweston | 2010-12-02

3 Comentarios

  1. 98

    Que buscar el valor de los datos con findData() y, a continuación, utilizar 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);
    }
    • +1, se debe mencionar cómo configurar los datos.
  2. 22

    Usted también puede tener una mirada en el método findText(const QString & texto) desde QComboBox; devuelve el índice del elemento que contiene el texto dado, (-1 si no se encuentra).
    La ventaja de usar este método es que usted no necesita para establecer el segundo parámetro al añadir un elemento.

    He aquí 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);
    • El uso de findText() nunca es bueno. findData() debe ser la forma preferida.
    • Su declaración es contradictoria. Estoy de acuerdo en que findData debe ser el «preferido», pero no la única forma. Estoy escribiendo la lógica de un sistema existente que a veces se crea una «simple» combobox contenido con datos nulos valores. Por lo general, findData es suficiente, pero a veces se necesita findText cuando no hay «datos» para encontrar.
  3. 3

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

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

    De la Qt 5.7 documentación

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

    Así como el cuadro combinado no es editable, el texto especificado en la llamada a la función será seleccionado en el cuadro combinado.

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

    • ui->comboBox->setCurrentText(«opción») es el válido y método sencillo !
    • Tal vez vale la pena destacar que este no está disponible en Qt 4.x, al menos no 4.8

Dejar respuesta

Please enter your comment!
Please enter your name here