Question

Dans Qt, je peux obtenir le selected text d'un QComboBox en utilisant le Procédé combobox->currentText(). Comment puis-je obtenir le selected value ?

Je cherchais de l'aide, mais je ne pouvais pas trouver un currentData() de méthode que je pensais trouver. Je ne pouvais trouver combobox->currentIndex()

Y at-il une façon plus intelligente de le faire autre que combobox->itemData(combobox->currentIndex())?

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

Était-ce utile?

La solution

Il semble que vous devez faire combobox->itemData(combobox->currentIndex()) si vous voulez obtenir les données actuelles du QComboBox.

Si vous utilisez votre propre classe dérivée de QComboBox, vous pouvez ajouter une fonction currentData().

Autres conseils

Celui-ci peut obtenir le texte de l'indice actuel:

QString cb = cbChoice ->currentText();

vous pouvez définir des données QVariant pour tous les éléments, vous pouvez obtenir la valeur lorsque vous en avez besoin.

est un exemple de code pour cette situation:

ui.comboBoxSheetSize->addItem("128 m", QVariant(128));
ui.comboBoxSheetSize->addItem("256 m", QVariant(256));
ui.comboBoxSheetSize->addItem("512 m", QVariant(512));
ui.comboBoxSheetSize->addItem("1024 m", QVariant(1024));

...

void Page::onComboSheetSizeChanged( int index )
{
 int value = ui.comboBoxSheetSize->itemData(index).toInt();
}

par le chemin, je pense que je mal compris votre question. Je pense que la façon dont vous obtenez des données est assez intelligent?

La fonction membre QComboBox :: CurrentData a été ajouté voir cette commit

J'avais même question

J'ai résolu par

value = self.comboBox.currentText()
print value

Ceci est mon code OK dans l'intervalle QT 4.7:

 //add combobox list 
    QString val;
   ui->startPage->clear();
    val = "http://www.work4blue.com";
    ui->startPage->addItem(tr("Navigation page"),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));

   // get current value
    qDebug() << "current value"<< 
       ui->startPage->itemData(ui->startPage->currentIndex()).toString();

Je suis étonné qu'il n'y ait pas un signal activé et ont le même problème. Je l'ai résolu en faisant une sous-classe de QComboBox. Je pense qu'il est préférable d'éviter d'avoir à accéder directement à l'objet et appeler ses fonctions parce que des moyens de couplage plus serré et va à l'encontre de la philosophie de Qt. Alors, voici la classe que je fait 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 la mise en œuvre

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

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

J'ai eu la question et

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

résolu ce.

si vous développez des plugins QGIS alors simplement

self.dlg.cbo_load_net.currentIndex()

Je l'ai fait

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();

Vous verrez ce que le _dirs QStringList nommé est structuré comme un tableau dont vous pouvez accéder aux membres via un index à la valeur retournée par _dirs.count ()

Je sais que je suis très en retard, mais pour ceux qui ont encore ce problème, il peut être résolu facilement. J'utilise Qt 5.3 et il fonctionne très bien. Pas besoin de créer une fonction ou tout cela.

int valueComboBox;
valueComboBox = comboBox->currentIndex();

et ça marche! Hope it helps!

Je confirme la meilleure façon est de faire ceci:

uiAnalyseAssets::AnalyseAssets(QWidget *parent)
: QWidget(parent)
{
ui.comboBox->addItem("text1");
ui.comboBox->addItem("text2");

...
}

void mainFunction::yourFunction( int index )
{
 int value = ui.comboBox->currentText();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top