2013-10-17 18 views
10

私は簡単なQComboBoxウィジェットを持っています。これはTrueFalseの2つの値を持っています。 そして私はQString変数currValueを持っています。これはその値の1つです。ウィジェットの現在の値をcurrValueに設定したいと思います。QComboBoxの選択項目を設定する

解決策は次のように考えました。 最初にcurrValueを初期化します。 QString currValue = "False";

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

しかし、それは動作しません。 何か間違っていますか? なぜQComboBoxにsetCurrentItem()やsmthのようなメンバーがないのですか?あなたが実際に次のようにそれを記述する必要が

答えて

22

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番目の引数を使用します。

UPDATE:

QComboBox::findData()関数の第二引数に特定の役割を設定されたコンボボックスの項目を見つけるための別の方法。あなたが明示的にユーザーデータを設定したくない場合は、Qt::DisplayRoleフラグ、すなわちでアイテムのテキストを参照することができます。

QComboBox* combo = new QComboBox(); 
combo->addItem("True"); 
combo->addItem("False"); 
combo->setCurrentIndex(combo->findData("False", Qt::DisplayRole)); // <- refers to the item text 

UPDATE 2:

別の代替テキストベースの検索を使用することができ機能QComboBox::findText()

QComboBox* combo = new QComboBox(); 
combo->addItem("True"); 
combo->addItem("False"); 
combo->setCurrentIndex(combo->findText("False")); 
+0

なぜ?! 2つの等しい引数の意味は何ですか? –

+0

@ KarenTsirunyan、私は詳細を私の答えを更新しました。 – vahancho

+0

私は参照してください。しかし、この場合、テキストだけではデータが必要ない場合は、新しいアイテムを追加するときにもデータを設定する必要があるというのは混乱していると思います。私は、選択したテキストを簡単に設定することができなければならないと思います。 –

3

私は自分自身の質問に答えました。

combo->setCurrentIndex(combo->findText(currValue)); 
関連する問題