按值删除ListWidget项目

Delete ListWidget item by value

本文关键字:项目 ListWidget 删除      更新时间:2023-10-16

我正在使用qlistwidget存储用于运行背景过程的标签:

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

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

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

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

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

请注意,除非您愿意使用返回的QListWidgetItem做另一件事,否则无需使用QListWidget::takeItem

如果您的目的只是将项目的行从列表中删除,则只需要delete即可。如文档中所述:

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