按值删除ListWidget项

时间:2016-12-11 16:09:07

标签: c++ qt qlistwidget

我正在使用QListWidget来存储运行后台进程的标签:

 // process starts
 ui->runningProcesses->addItem("Process: "+processID);

这仅供显示。用户不选择项目或以其他方式与列表框交互。后台进程完成后,我想删除相应的列表框项。我试过了:

 delete ui->runningProcesses->takeItem(ui->runningProcesses->findItems("Process:"+processID,Qt::MatchExactly) );

但它的语法无效。最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

QListWidget::findItems返回QList<QListWidgetItem*>。您无法删除列表,您需要遍历列表并删除其中的每个项目。

请注意,除非您愿意使用返回的QListWidget::takeItem执行其他操作,否则无需使用QListWidgetItem

如果您的目的是从列表中删除项目的行,则只需delete即可。正如docs

中所述
auto itemsToRemove= listWidget.findItems("Process: 7", Qt::MatchExactly);
for(auto item : itemsToRemove) delete item;