Wie kann ich den ausgewählten Wert aus einem Qcombobox herausholen?
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
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();
}