web-dev-qa-db-ja.com

QComboBoxの選択した項目を設定します

シンプルなQComboBoxウィジェットがあり、内部にTrueFalseの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がないのですか?

18
Karen Tsirunyan

実際には、次のように記述する必要があります。

_QComboBox* combo = new QComboBox();
combo->addItem("True", "True");
combo->addItem("False", "False");
combo->setCurrentIndex(combo->findData("False"));
_

実装の問題は、項目userDataではなく、テキストのみを設定したことです。同時に、空のuserDataでアイテムを検索しようとしました。与えられた実装では、アイテムのuserDataQVariantを設定する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"));
_
28
vahancho

私自身の質問に対する答えを得ました。

combo->setCurrentIndex(combo->findText(currValue));
5
Karen Tsirunyan