2013-10-17 222 views
10

我有一個簡單的QComboBox小部件,其中有2個值:TrueFalse。 而我有一個QString變量currValue,這是其中的一個值。我想用currValue來設置我的小部件的當前值。爲QComboBox設置選定的項目

我認爲解決方案如下: 首先讓我們初始化currValue; QString currValue = "False";

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

但它不工作。 我做錯了什麼? 爲什麼QComboBox有沒有成員setCurrentItem()或像這樣的?

回答

22

實際上,你需要把它寫在下面的方法:

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

在你實現的問題是,你沒有設置項目用戶數據,但只有文字。在同一時間,您嘗試通過其用戶數據找到空的項目。 使用給定的實現,我只使用QComboBox::addItem(const QString &text, const QVariant &userData = QVariant()))函數的第二個參數來設置項目的userDataQVariant)。

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 

更新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)); 
相關問題