QListWidget вызывает сбой при вызове clear () при выделении элементов

У меня происходит сбой приложения, когда я пытаюсь очистить () все элементы из 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.

Буду благодарен за любые предложения, как я могу решить проблему.

1

Решение

Я нашел решение самостоятельно. По-видимому, проблема была вызвана доступом к выбранному элементу в методе slot, который был подключен к сигналу itemSelectionChanged (). Здесь я получил доступ к тексту выбранного элемента через

string text = ui->listWidget->selectedItems().first()->text().toStdString();

После этого произошел сбой, как описано в моем вопросе, например, по телефону. Чисто(). Я предполагаю, что процесс выбора не закончен, когда испускается itemSelectionChanged () и QListWidget каким-то образом запутывается, когда к выбранным элементам уже обращаются в этот момент времени. После замены сигнала на itemClicked (QListWidgetItem *) приложение больше не зависало.

2

Другие решения

ui->listWidget->blockSignals(true);
ui->listWidget->clear();
ui->listWidget->blockSignals(false);

введите описание изображения здесь

Это сработало в моем случае.

0

По вопросам рекламы [email protected]