2013-10-17 218 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)); 
相关问题