QCombobox не выбирает при изменении currentIndex

В моем конструкторе я подключаюсь к базе данных Sqlite и читаю из нее «Категории» (QStrings). Я храню их в 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;
}

person Davlog    schedule 10.08.2013    source источник
comment
Вы должны указать, какую версию Qt вы используете.   -  person    schedule 10.08.2013
comment
Ничего не выбрано или выбран не тот элемент?   -  person Nafis Zaman    schedule 11.08.2013
comment
Когда я запускаю приложение, ничего не выбирается, а вставляется в QCombobox.   -  person Davlog    schedule 12.08.2013


Ответы (1)


Возможно, первый элемент пуст? Поскольку вы только добавляете элементы в QComboBox, возможно, что индекс 0 (с самого начала) является пустой строкой.

попробуйте поставить ui->cmbCategory->removeItem(0); в начале updateCategories, чтобы проверить, так ли это

также, если currCategoryIndex является индексом, который не существует (например, -1), QComboBox также будет пустым (даже если нет пустой строки для выбора) - в этом случае вы можете попробовать жестко закодировать 0 в функции (если вы хотите чтобы элемент всегда был первым), или добавьте дополнительную проверку, например:

if (0 > currentCategoryIndex || currentCategoryIndex > ui->cmbCategory->count())
    currentCategoryIndex = 0
person Tomasz Lewowski    schedule 10.08.2013