按值删除 ListWidget 项

Delete ListWidget item by value

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

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

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

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

但它是无效语法。执行此操作的最佳方法是什么?

QListWidget::findItemsreturns一个QList<QListWidgetItem*>。无法删除列表,需要遍历列表,删除其中的每一项。

请注意,没有必要使用 QListWidget::takeItem 除非你愿意用返回的 QListWidgetItem 做另一件事。

如果您的目标只是从列表中删除项目所在的行,则只需 delete 即可。如 docs 中所述:

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