Dans Qt, je peux obtenir le selected text
d'une QComboBox
en utilisant la méthode combobox->currentText()
. Comment puis-je obtenir le selected value
?
J'ai cherché de l'aide mais je n'ai pas trouvé de méthode currentData()
que je m'attendais à trouver. Je n'ai trouvé que combobox->currentIndex()
Existe-t-il un moyen plus intelligent de procéder autrement que combobox->itemData(combobox->currentIndex())
?
Mise à jour: Ceci 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
Il semble que vous ayez besoin de combobox->itemData(combobox->currentIndex())
si vous voulez obtenir les données actuelles de QComboBox.
Si vous utilisez votre propre classe dérivée de QComboBox, vous pouvez ajouter une fonction currentData()
.
Celui-ci peut obtenir le texte de l'index actuel:
QString cb = cbChoice ->currentText();
vous pouvez définir les données QVariant pour tous les éléments, puis vous pouvez obtenir la valeur quand vous en avez besoin.
il existe 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();
}
en passant, je pense que j'ai mal compris votre question. Je pense que la façon dont vous obtenez les données est assez intelligente?
La fonction membre QComboBox :: currentData a été ajoutée depuis la réponse à cette question, voir ceci commit
J'ai eu le même problème
J'ai résolu par
value = self.comboBox.currentText()
print value
Ceci est mon code OK dans 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 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'avoir à accéder directement à l'objet et à appeler ses fonctions car cela signifie un couplage plus étroit et va à l'encontre de la philosophie de Qt. Alors voici le cours que j'ai 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 place
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 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();
Vous verrez ainsi que le QStringList nommé _dirs est structuré comme un tableau dont vous pouvez accéder aux membres via un index jusqu’à la valeur renvoyée par _dirs.count ()
si vous développez des plugins QGIS, alors simplement
self.dlg.cbo_load_net.currentIndex()
J'avais le problème et
QString str = m_UI->myComboBox->currentText();
résolu ceci.