Qt 为QComboBox设置所选项目
我有一个简单的Qt 为QComboBox设置所选项目,qt,qcombobox,Qt,Qcombobox,我有一个简单的QComboBox小部件,里面有两个值:True和False。 我有一个QString变量currValue,它就是这些值之一。我想用currValue设置小部件的当前值 我认为解决办法如下: 首先让我们初始化当前值; QString currValue=“False” 但它不起作用。 我做错什么了吗? 为什么QComboBox没有成员setCurrentItem()或类似的smth 您实际上需要按以下方式编写: QComboBox* combo = new QComboBox()
QComboBox
小部件,里面有两个值:True
和False
。
我有一个QString变量currValue
,它就是这些值之一。我想用currValue
设置小部件的当前值
我认为解决办法如下:
首先让我们初始化当前值;
QString currValue=“False”代码>
但它不起作用。
我做错什么了吗?
为什么QComboBox没有成员setCurrentItem()或类似的smth 您实际上需要按以下方式编写:
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())的第二个参数设置项的用户数据(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
我自己的问题已经有了答案
combo->setCurrentIndex(combo->findText(currValue));
为什么?两个相等的论点是什么意思?我明白了。但在这种情况下,我认为如果我只有文本而不需要数据,那么在添加新项目时,我还必须设置数据,这是令人困惑的。我想一定有更简单的方法来设置我选择的文本。@KarenTsirunyan:如果你不想设置用户数据,你可以参考组合框项目的文本。我知道你提出了真正的解决方案,但正如你所看到的,有点奇怪,因为我想找到文本,但我处理的是数据。我刚刚发现QComboBox
还有findText()
方法,这正是我想要的。:)@KarenTsirunyan,我提出了三种不同的方法来获得相同的结果-您可以使用其中任何一种。或者,您也可以调用setCurrentText()
QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findText("False"));
combo->setCurrentIndex(combo->findText(currValue));