为QComboBox设置所选项目

Kar*_*yan 15 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));
Run Code Online (Sandbox Code Playgroud)

但它不起作用.难道我做错了什么 ?为什么QComboBox没有成员setCurrentItem()或smth那样?

vah*_*cho 29

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

QComboBox* combo = new QComboBox();
combo->addItem("True", "True");
combo->addItem("False", "False");
combo->setCurrentIndex(combo->findData("False"));
Run Code Online (Sandbox Code Playgroud)

您的实现中的问题是您没有设置项目的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
Run Code Online (Sandbox Code Playgroud)

更新2:

另一种选择可能是使用基于文本的查找功能QComboBox::findText():

QComboBox* combo = new QComboBox();
combo->addItem("True");
combo->addItem("False");
combo->setCurrentIndex(combo->findText("False"));
Run Code Online (Sandbox Code Playgroud)


Kar*_*yan 5

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

combo->setCurrentIndex(combo->findText(currValue));
Run Code Online (Sandbox Code Playgroud)