Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为QComboBox设置所选项目_Qt_Qcombobox - Fatal编程技术网

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