シンプルなQComboBox
ウィジェットがあり、内部にTrue
とFalse
の2つの値があります。そして、QString変数currValue
があります。これは、これらの値の1つです。ウィジェットの現在の値をcurrValue
で設定したい。
私はその解決策は次のとおりだと思いました:最初にcurrValueを初期化しましょう。 QString currValue = "False";
QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findData(currValue));
しかし、それは機能しません。私は何か間違ったことをしていますか?そして、なぜQComboBoxにはメンバーsetCurrentItem()またはそのようなsmthがないのですか?
実際には、次のように記述する必要があります。
_QComboBox* combo = new QComboBox();
combo->addItem("True", "True");
combo->addItem("False", "False");
combo->setCurrentIndex(combo->findData("False"));
_
実装の問題は、項目userDataではなく、テキストのみを設定したことです。同時に、空のuserDataでアイテムを検索しようとしました。与えられた実装では、アイテムのuserData(QVariant
を設定するQComboBox::addItem(const QString &text, const QVariant &userData = QVariant()))
関数の2番目の引数を使用します)。
更新:
コンボボックス項目を検索する別の方法は、特定の役割をQComboBox::findData()
関数の2番目の引数として設定することです。ユーザーデータを明示的に設定したくない場合は、_Qt::DisplayRole
_フラグを使用してアイテムのテキストを参照できます。
_QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findData("False", Qt::DisplayRole)); // <- refers to the item text
_
更新2:
別の代替方法は、テキストベースのルックアップ関数QComboBox::findText()
を使用することです。
_QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findText("False"));
_
私自身の質問に対する答えを得ました。
combo->setCurrentIndex(combo->findText(currValue));