当我尝试清除()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。
我会感谢任何建议,我如何解决问题。
答案 0 :(得分:2)
我自己找到了解决方案。问题似乎是通过访问插槽方法中的选定项目引起的,该方法连接到信号itemSelectionChanged()。在这里,我通过
访问了所选项目的文本string text = ui->listWidget->selectedItems().first()->text().toStdString();
之后,如我的问题所述,通过调用例如明确()。我猜选择过程没有完成,当发出itemSelectionChanged()并且当这个时间点已经访问了所选项时,QListWidget会以某种方式混淆。通过itemClicked(QListWidgetItem *)替换信号后,应用程序不再崩溃。
答案 1 :(得分:1)