Frage

In QT kann ich das bekommen selected text von a QComboBox durch Verwendung dercombobox->currentText() Methode. Wie kann ich das bekommen? selected value?

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

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

UPDATE: Dies ist ab QT 5 nicht mehr erforderlich currentData() Methode wurde hinzugefügt http://doc.qt.io/qt-5/qcombobox.html#currentdata-Prop

War es hilfreich?

Lösung

Es scheint, dass Sie tun müssen combobox->itemData(combobox->currentIndex()) Wenn Sie die aktuellen Daten des Qcombobox erhalten möchten.

Wenn Sie Ihre eigene Klasse verwenden, die von Qcombobox abgeleitet ist, können Sie a hinzufügen currentData() Funktion.

Andere Tipps

Dieser kann den Text des aktuellen Index erhalten:

QString cb = cbChoice ->currentText();

Sie können QVariant -Daten für alle Elemente festlegen, dann können Sie 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 übrigens, ich habe Ihre Frage missverstanden. Ich denke, die Art und Weise, wie Sie Daten erhalten, ist klug genug?

Die Mitgliedsfunktion Qcombobox :: CurrentData wurde hinzugefügt, seit diese Frage gestellt wurde, siehe dies verpflichten

Ich hatte das gleiche Problem

Ich habe durch gelöst

value = self.comboBox.currentText()
print value

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

Ich bin erstaunt, dass es kein aktiviertes Signal gibt und das gleiche Problem hat. Ich habe es gelöst, indem ich eine Unterklasse von Qcombobox herstellte. Ich denke, es ist besser, es zu vermeiden, direkt auf das Objekt zuzugreifen und seine Funktionen aufzurufen, da dies eine engere Kopplung bedeutet und gegen die Philosophie von QT 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 Implementierung

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

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

Ich hatte das Problem und

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

löste das.

Wenn Sie QGIS -Plugins entwickeln, dann einfach

self.dlg.cbo_load_net.currentIndex()

ich war das

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 damit feststellen, dass die QStringlist mit dem Namen _dirs wie ein Array strukturiert ist, dessen Mitglieder Sie über einen Index bis zu dem von _Dirs.Count zurückgegebenen Index () zugreifen können ()

Ich weiß, dass ich sehr spät bin, aber für diejenigen, die dieses Problem noch haben, kann es leicht gelöst werden. Ich benutze QT 5.3 und es funktioniert gut. Sie müssen keine Funktion oder alles erstellen.

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

und es funktioniert ! Ich hoffe es hilft !

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

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

...
}

void mainFunction::yourFunction( int index )
{
 int value = ui.comboBox->currentText();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top