我有一个简单的QComboBox
窗口小部件,里面有2个值:True
和False
。
我有一个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?
答案 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));