18

我有一个简单的QComboBox小部件,里面有 2 个值:TrueFalse. 我有一个 QString 变量currValue,它是这些值之一。我想用 设置我的小部件的当前值currValue

我认为解决方案如下:首先让我们初始化 currValue; QString currValue = "False";

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

但它不起作用。难道我做错了什么 ?为什么 QComboBox 没有成员 setCurrentItem() 或类似的东西?

4

2 回答 2

33

您实际上需要按以下方式编写它:

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

您的实现中的问题是您没有设置项目的userData,而只是设置了文本。同时,您尝试通过其为空的userData查找项目。对于给定的实现,我只使用QComboBox::addItem(const QString &text, const QVariant &userData = QVariant()))设置项目的userData ( QVariant) 的函数的第二个参数。

更新:

查找组合框项的另一种方法是将特定角色设置为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"));
于 2013-10-17T14:39:36.143 回答
6

我已经回答了我自己的问题。

combo->setCurrentIndex(combo->findText(currValue));
于 2013-10-17T15:00:33.990 回答