我有一个简单的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));
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)
我已经回答了我自己的问题。
combo->setCurrentIndex(combo->findText(currValue));
Run Code Online (Sandbox Code Playgroud)