为QComboBox设置所选项目

时间:2013-10-17 14:32:42

标签: qt qcombobox

我有一个简单的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()或类似的smth?

2 个答案:

答案 0 :(得分:26)

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

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"));

答案 1 :(得分:5)

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

combo->setCurrentIndex(combo->findText(currValue));