Question

Quelle serait la meilleure façon de sélectionner un élément dans une zone de liste déroulante QT sur une liste prédéfinie de enum base des valeurs uniques.

Dans le passé, je me suis habitué au style de .NET de sélection où l'élément peut être sélectionné en définissant la propriété sélectionnée à la valeur de l'élément que vous souhaitez sélectionner:

cboExample.SelectedValue = 2;

Y at-il de toute façon de le faire avec QT en fonction des données de l'élément, si les données sont une énumération C ++?

Était-ce utile?

La solution

Vous lookup la valeur des données avec findData() puis utilisez 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);
}

Autres conseils

Vous pouvez également jeter un oeil à la méthode findText (const QString & text) de QComboBox; il renvoie l'index de l'élément qui contient le texte donné, (-1 si elle est introuvable). L'avantage de cette méthode est que vous n'avez pas besoin de définir le second paramètre lorsque vous ajoutez un élément.

Voici un petit exemple:

/* 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 vous connaissez le texte dans la zone de liste déroulante que vous voulez sélectionner, il suffit d'utiliser la méthode setCurrentText () pour sélectionner cet élément.

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

A partir de la documentation de Qt 5.7

  

Le setCurrentText setter () appelle simplement setEditText () si le combo   boîte est modifiable. Dans le cas contraire, s'il y a un texte correspondant dans la liste,   currentIndex est fixé à l'indice correspondant.

Donc, tant que la zone de liste déroulante n'est pas modifiable, le texte spécifié dans l'appel de fonction sera sélectionnée dans la zone de liste déroulante.

Référence: http://doc.qt.io/qt -5 / qcombobox.html # currentText-prop

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top