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
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.
Dieser kann den Text des aktuellen Index abrufen:
QString cb = cbChoice ->currentText();
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?
Die Memberfunktion QComboBox :: currentData wurde hinzugefügt, seit diese Frage gestellt wurde. Siehe commit .
Ich hatte das gleiche Problem
Ich habe gelöst mit
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 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)));
}
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.
wenn Sie QGIS-Plugins entwickeln, dann einfach
self.dlg.cbo_load_net.currentIndex()
Ich hatte das Problem und
QString str = m_UI->myComboBox->currentText();
gelöst das