В моем конструкторе я подключаюсь к базе данных Sqlite и читаю «Категории» (QString
s) из этого.
Я храню их в QList
, Я проверил через отладчик, если они пустые, но все в порядке.
int currCategoryIndex
установлен в 0 в моем списке инициализатора. И с тех пор QComboboxes
начать индексирование с 0, это должен быть первый элемент.
Выписка из моего конструктора:
dm.readDB_C(c_list); //reads into c_list
if(c_list.count() > 0) //has 1 or more items
updateCategories();
Это та часть, где я читаю базу данных, проверяю, пуста ли она, и если нет, вызываю функцию, которая добавляет эти категории в QComboBox
,
updateCategories()
функция:
void MainWindow::updateCategories()
{
for(int i = 0; i < c_list.count(); i++){
if(ui->cmbCategory->findText(c_list[i]) != -1){ //-1 means "not found"continue;
} else {
ui->cmbCategory->addItem(c_list[i]); //Add to QCombobox
}
}
ui->cmbCategory->setCurrentIndex(currCategoryIndex); //Should be the first item
}
У меня есть все предметы в моем QCombobox, но ни один не выбран. Я должен нажать на коробку и выбрать один сам. Этого не должно быть.
Что случилось? Почему он не выбирает сам?
Редактировать:
currentIndexChanged
сигнал:
void MainWindow::on_cmbCategory_currentIndexChanged(int index){
currCategoryIndex = index;
}
Возможно, первый товар пуст?
Поскольку вы только добавляете элементы в QComboBox, возможно, что индекс 0 является (с самого начала) пустой строкой.
попробуйте положить
ui->cmbCategory->removeItem(0);
в начале updateCategories, чтобы проверить, если это так
Кроме того, если currCategoryIndex является несуществующим индексом (например, -1), QComboBox также будет пустым (даже если нет пустой строки для выбора) — в этом случае вы можете попробовать жестко закодировать 0 в функции (если вы хотите элемент всегда должен быть первым), или добавьте дополнительную проверку, например:
if (0 > currentCategoryIndex || currentCategoryIndex > ui->cmbCategory->count())
currentCategoryIndex = 0
Других решений пока нет …