101 votes

Comment puis-je obtenir la VALEUR sélectionnée d'un QCombobox?

En Qt, je peux obtenir le texte sélectionné d'un QComboBox en utilisant la méthode combobox->currentText(). Comment puis-je obtenir la valeur sélectionnée?

J'ai cherché de l'aide mais je n'ai pas pu trouver de méthode currentData() que j'espérais trouver. Je n'ai pu trouver que combobox->currentIndex()

Y a-t-il un moyen plus intelligent de le faire autre que combobox->itemData(combobox->currentIndex())?

Mise à jour : Ce n'est plus nécessaire à partir de Qt 5. Une méthode currentData() a été ajoutée http://doc.qt.io/qt-5/qcombobox.html#currentData-prop

3voto

bluedrum Points 46

Ceci est mon code OK en QT 4.7 :

//ajouter liste déroulante
    QString val;
    ui->startPage->clear();
    val = "http://www.work4blue.com";
    ui->startPage->addItem(tr("Page de navigation"), QVariant::fromValue(val));
    val = "https://www.google.com";
    ui->startPage->addItem("www.google.com", QVariant::fromValue(val));
    val = "www.twitter.com";
    ui->startPage->addItem("www.twitter.com", QVariant::fromValue(val));
    val = "https://www.youtube.com";
    ui->startPage->addItem("www.youtube.com", QVariant::fromValue(val));

   // obtenir la valeur actuelle
    qDebug() << "valeur actuelle" <<
       ui->startPage->itemData(ui->startPage->currentIndex()).toString();

1voto

pinkboi Points 259

Je suis étonné qu'il n'y ait pas de signal activé et avoir le même problème. Je l'ai résolu en créant une sous-classe de QComboBox. Je pense qu'il est préférable d'éviter d'accéder directement à l'objet et d'appeler ses fonctions car cela signifie un couplage plus étroit et va à l'encontre de la philosophie de Qt. Voici donc la classe que j'ai créée qui fonctionne pour moi.

class SmartComboBox : public QComboBox {

    Q_OBJECT

private slots:

    void triggerVariantActivated(int index);

public:

    SmartComboBox(QWidget *parent);

signals:

    void activated(const QVariant &);

};

Et l'implémentation

void SmartComboBox::triggerVariantActivated(int index)
{
    activated(itemData(index));
}

SmartComboBox::SmartComboBox(QWidget *parent)
:QComboBox(parent)
{
    connect(this, SIGNAL(activated(int)), this, SLOT(triggerVariantActivated(int)));
}

1voto

deit Points 9

La question est ancienne, mais peut-être que quelqu'un a besoin d'une réponse actuelle.

Dans QGIS 3.4, vous pouvez obtenir la valeur de la QComboBox avec la méthode currentData().

Exemple : comboBox.currentData()

Lien : https://doc.qt.io/qt-5/qcombobox.html#currentData-prop

0voto

E Purdy Points 57

J'ai fait ça

QDir path("/home/user/");
QStringList _dirs = path.entryList(QDir::Dirs);
std::cout << "_dirs_count = " << _dirs.count() << std::endl;
ui->cmbbox->addItem(Files);
ui->cmbbox->show();

Avec cela, vous verrez que le QStringList nommé _dirs est structuré comme un tableau dont les membres peuvent être accédés via un index jusqu'à la valeur retournée par _dirs.count()

-1voto

antitrust Points 4853

J'avais le problème et

QString str = m_UI->myComboBox->currentText();

résolu ce.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X