Ответ 1
Вам действительно нужно записать его следующим образом:
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
).
UPDATE:
Альтернативный способ найти элемент со списком задает определенную роль как второй аргумент для функции 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"));