Sie müssen tatsächlich in der folgenden Art und Weise schreiben:
QComboBox* combo = new QComboBox();
combo->addItem("True", "True");
combo->addItem("False", "False");
combo->setCurrentIndex(combo->findData("False"));
Das Problem bei der Implementierung war, dass Sie nicht die Einzelteile Userdata gesetzt haben, sondern nur Text. In der gleichen Zeit haben Sie versucht, Artikel durch seine userData, die leer war zu finden. Mit der angegebenen Implementierung verwende ich nur das zweite Argument der QComboBox::addItem(const QString &text, const QVariant &userData = QVariant()))
Funktion, die userData (QVariant
) des Elements setzt.
UPDATE:
Der alternative Weg, um das Kombinationsfeld Artikel zu finden, ist die spezifische Rolle als zweites Argument Einstellung für QComboBox::findData()
Funktion. Wenn Sie nicht explizit die Benutzerdaten eingeben möchten, können Sie den Artikel Texte mit Qt::DisplayRole
Flagge beziehen, das heißt:
QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findData("False", Qt::DisplayRole)); // <- refers to the item text
UPDATE 2:
Eine weitere Alternative textbasierte Lookup verwenden könnte Funktion QComboBox::findText()
:
QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findText("False"));
Warum?! Was bedeuten 2 gleiche Argumente? –
@KarenTsirunyan, ich habe meine Antwort mit weiteren Details aktualisiert. – vahancho
Ich verstehe. Aber in diesem Fall denke ich, dass es verwirrend ist, dass wenn ich nur Texte habe und ich keine Daten benötige, ich auch Daten beim Hinzufügen neuer Elemente einstellen muss. Ich denke, da MUSS es einfacher sein, den ausgewählten Text auszuwählen. –