it-swarm.com.de

Wie kann ich den ausgewählten Wert aus einer QCombobox erhalten?

In Qt kann ich den selected text einer QComboBox mit der combobox->currentText()-Methode abrufen Wie kann ich den selected value erhalten?

Ich suchte nach Hilfe, konnte aber keine Methode currentData() finden, die ich erwartet hatte. Ich konnte nur combobox->currentIndex() finden

Gibt es eine intelligentere Möglichkeit, dies anders als combobox->itemData(combobox->currentIndex()) zu tun?

Update: Dies ist ab Qt 5 nicht mehr erforderlich. Eine currentData()-Methode wurde hinzugefügt http://doc.qt.io/qt-5/qcombobox.html#currentData-prop

76
sabbour

Es scheint, dass Sie combobox->itemData(combobox->currentIndex()) tun müssen, wenn Sie die aktuellen Daten der QComboBox abrufen möchten.

Wenn Sie eine eigene von QComboBox abgeleitete Klasse verwenden, können Sie eine currentData()-Funktion hinzufügen.

73

Dieser kann den Text des aktuellen Index abrufen:

QString cb = cbChoice ->currentText();
22

sie können QVariant-Daten für alle Elemente festlegen und dann den Wert erhalten, wenn Sie ihn benötigen.

es gibt einen Beispielcode für diese 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();
}

ich glaube, ich habe Ihre Frage falsch verstanden. Ich denke, die Art und Weise, wie Sie Daten erhalten, ist klug genug?

19
ufukgun

Die Memberfunktion QComboBox :: currentData wurde hinzugefügt, seit diese Frage gestellt wurde. Siehe commit .

11
joaerl

Ich hatte das gleiche Problem 

Ich habe gelöst mit 

value = self.comboBox.currentText()
print value
6
jatin

Dies ist mein OK-Code in 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();
2
bluedrum

Ich bin erstaunt, dass es kein aktiviertes Signal gibt und dasselbe Problem haben. Ich habe es gelöst, indem ich eine Unterklasse von QComboBox erstellt habe. Ich denke, es ist besser, nicht direkt auf das Objekt zugreifen und seine Funktionen aufrufen zu müssen, da dies eine engere Kopplung bedeutet und der Philosophie von Qt widerspricht. Also hier ist die Klasse, die ich gemacht habe und die für mich funktioniert.

class SmartComboBox : public QComboBox {

    Q_OBJECT

private slots:

    void triggerVariantActivated(int index);

public:

    SmartComboBox(QWidget *parent);

signals:

    void activated(const QVariant &);

};

Und die Umsetzung

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

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

Ich tat dies

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

Sie werden sehen, dass die QStringList mit dem Namen _dirs wie ein Array aufgebaut ist, auf das Sie über einen Index bis zu dem von _dirs.count () zurückgegebenen Wert zugreifen können.

0
E Purdy

wenn Sie QGIS-Plugins entwickeln, dann einfach 

self.dlg.cbo_load_net.currentIndex()
0
Abhijit Gujar

Ich hatte das Problem und 

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

gelöst das 

0
octoback