У меня происходит сбой приложения, когда я пытаюсь очистить () все элементы из QListWidget и выбрать хотя бы один элемент. Вызов clearSelection () также вызывает сбой программы (при вызове clearSelection ()). Удаление элементов в цикле while также приводит к сбою. Сообщение об ошибке
ASSERT: «! IsEmpty ()» в файле /usr/include/qt4/QtCore/qlist.h, строка 282.
Пример кода:
void MainWindow::clearListWidget()
{
// ui->listWidget->clearSelection(); // --> causes crash
// ui->listWidget->clear(); // --> also causes crash
while(ui->listWidget->count()>0) // --> no crash calling count()
ui->listWidget->takeItem(0); // --> crash again
}
Как уже упоминалось, приложение только падает, если элементы выбраны. Если ничего не выбрано, то описанные выше методы работают как задумано. Я работаю с Qt 4.8.4 на Ubuntu.
Буду благодарен за любые предложения, как я могу решить проблему.
Я нашел решение самостоятельно. По-видимому, проблема была вызвана доступом к выбранному элементу в методе slot, который был подключен к сигналу itemSelectionChanged (). Здесь я получил доступ к тексту выбранного элемента через
string text = ui->listWidget->selectedItems().first()->text().toStdString();
После этого произошел сбой, как описано в моем вопросе, например, по телефону. Чисто(). Я предполагаю, что процесс выбора не закончен, когда испускается itemSelectionChanged () и QListWidget каким-то образом запутывается, когда к выбранным элементам уже обращаются в этот момент времени. После замены сигнала на itemClicked (QListWidgetItem *) приложение больше не зависало.
ui->listWidget->blockSignals(true);
ui->listWidget->clear();
ui->listWidget->blockSignals(false);
Это сработало в моем случае.