QComboBox - réglez l'élément sélectionné basée sur les données de l'élément

quelle serait la meilleure façon de sélectionner un élément dans une boîte bascule QT à partir d'une liste préétablie de valeurs uniques basées sur enum.

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

cboExample.SelectedValue = 2;

y a-t-il de toute façon à faire cela avec QT basé sur les données de l'article, si les données sont une énumération C++?

38
demandé sur waldyrious 2010-12-03 00:59:24

3 réponses

vous cherchez la valeur des données avec findData() puis utiliser 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);
}
78
répondu Martin Beckett 2018-08-31 10:20:44

Vous pouvez aussi regarder la méthode findText (const QString & text) de QComboBox; elle renvoie l'index de l'élément qui contient le texte donné, (-1 si non trouvé). L'avantage de cette méthode est que vous n'avez pas besoin de définir le deuxième 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);
21
répondu Aloïké Go 2012-03-30 12:40:40

si vous connaissez le texte dans la boîte bascule que vous voulez sélectionner, utilisez simplement la méthode setCurrentText() pour sélectionner cet élément.

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

à Partir de l'intervalle Qt 5.7 documentation

le setter setCurrentText () appelle simplement setEditText () si le combo zone est modifiable. Sinon, si il y a un texte correspondant dans la liste, currentIndex est défini à l'index correspondant.

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

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

1
répondu Hard.Core.Coder 2016-12-08 07:53:44