2010-01-13 2 views
65

In Qt, kann ich den ausgewählten Text einer QComboBox mit der combobox->currentText() Methode erhalten. Wie kann ich den ausgewählten Wert bekommen?Wie kann ich den ausgewählten VALUE aus einer QCombobox herausholen?

Ich überprüfte http://qt.nokia.com/doc/4.6/qcombobox.html für Hilfe, aber ich konnte keine Methode currentData() finden, die ich erwartete zu finden. Ich konnte nur finden combobox->currentIndex()

Gibt es eine klügere Möglichkeit, es als combobox->itemData(combobox->currentIndex()) zu tun?

Antwort

65

Es scheint, Sie müssen combobox->itemData(combobox->currentIndex()) tun, wenn Sie die aktuellen Daten der QComboBox erhalten möchten. Wenn Sie Ihre eigene Klasse verwenden, die von QComboBox abgeleitet ist, können Sie eine currentData()-Funktion hinzufügen.

+1

Danke. Ich habe diesen Tipp gerade in meinem Programm verwendet. –

+1

@Patrice Bernassola Allerdings ist die Switch-Operation vom Typ 'QVariant': 'combobox-> itemData (combobox-> currentIndex()) 'illegal !!! Warum ? –

+0

Dies funktioniert nicht, wenn nichts ausgewählt ist, d. H. 'CurrentIndex = -1'. Es wird entweder die Daten aus dem letzten Index zurückgeben oder einen Fehler auslösen, wenn die QComboBox leer ist. – johnson

18

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

gibt es ein Beispiel-Code 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(); 
} 

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

-4

Ich bestätige, der einfachste Weg, dies zu tun ist:

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

... 
} 

void mainFunction::yourFunction(int index) 
{ 
int value = ui.comboBox->currentText(); 
} 
+7

Warte eine Sekunde - gibt 'QComboBox :: currentText()' 'QString' zurück? Wie kommst du zu einem vernünftigen 'int'? Und was willst du mit deinem Parameter 'int index' machen? –

15

dazu ein, den Text des aktuellen Index erhalten:

QString cb = cbChoice ->currentText(); 
+2

Die einzige richtige Antwort. – TranslucentCloud

+0

Wie hilft das? 'currentText' ist das, was dem OP bereits bekannt ist ... – Aconcagua

2

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

Ich hatte das Problem und

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

löste dies.

9

Die Memberfunktion QComboBox :: Current hinzugefügt wurde, da diese Frage wurde gebeten, dies sehen commit

+0

Für die Dokumentation siehe: http://doc.qt.io/qt-5/qcombobox.html#currentData-prop. Die Eigenschaft ist seit Qt 5.2 verfügbar. – m4tx

4

ich

gleiche Problem hatte

ich von

value = self.comboBox.currentText() 
print value 
+1

Das ist der Etikettentext, nicht der Wert. – mmitchell

1

Ich bin erstaunt gelöst haben dass es kein aktiviertes Signal gibt und das gleiche Problem hat. Ich habe es gelöst, indem ich eine Unterklasse von QComboBox erstellt habe. Ich denke, es ist besser zu vermeiden, dass man direkt auf das Objekt zugreifen und seine Funktionen aufrufen muss, da dies eine engere Kopplung bedeutet und gegen Qt's Philosophie verstößt. Also hier ist die Klasse, die ich gemacht habe, 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

Ich weiß, ich bin sehr spät, aber für diejenigen, die immer noch das Problem haben, kann es leicht gelöst werden. Ich benutze Qt 5.3 und es funktioniert gut.Keine Notwendigkeit, eine Funktion oder alles zu erstellen.

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

und es funktioniert! Hoffe es hilft!

+0

Index ist nicht dasselbe wie Wert – Vladp

0

wenn Sie QGIS Plugins entwickeln dann einfach

self.dlg.cbo_load_net.currentIndex() 
0

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 mit diesem sehen, dass die QStringList namens _dirs wie ein Array aufgebaut ist, deren Mitglieder Sie können über zugreifen ein Index bis zu dem von _dirs.count() zurückgegebenen Wert