当选择项目时调用clear()时,QListWidget会导致崩溃

时间:2013-12-23 20:18:35

标签: c++ qt ubuntu qt4 qlistwidget

当我尝试清除()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
}

如上所述,如果选择了项目,应用程序只会崩溃。如果未选择任何内容,则上述方法按预期工作。我在Ubuntu上使用Qt 4.8.4。

我会感谢任何建议,我如何解决问题。

2 个答案:

答案 0 :(得分:2)

我自己找到了解决方案。问题似乎是通过访问插槽方法中的选定项目引起的,该方法连接到信号itemSelectionChanged()。在这里,我通过

访问了所选项目的文本
string text = ui->listWidget->selectedItems().first()->text().toStdString();

之后,如我的问题所述,通过调用例如明确()。我猜选择过程没有完成,当发出itemSelectionChanged()并且当这个时间点已经访问了所选项时,QListWidget会以某种方式混淆。通过itemClicked(QListWidgetItem *)替换信号后,应用程序不再崩溃。

答案 1 :(得分:1)

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

enter image description here

这对我来说很有效。