通过文本内容删除 QListWidget 项
Posted
技术标签:
【中文标题】通过文本内容删除 QListWidget 项【英文标题】:Delete QListWidget item by text content 【发布时间】:2017-02-23 22:43:46 【问题描述】:我需要通过文本内容删除一个 qlistwidget 项
我试过了:
QString mstring = "Programmer II";
QList<QListWidgetItem *> items = ui->listJobs->findItems(mstring, Qt::MatchExactly);
if (items.size() > 0)
ui->listJobs->takeItem( ui->listJobs->currentRow() );
...和各种排列,但我错过了一些东西。上面的代码会编译,但不会从 qlistwidget 中删除项目。
【问题讨论】:
可以显示其他项的值 对不起,我不明白。 其他项目的值是多少,即文本? 请不要添加问题的答案。如果您解决了自己的问题,无论是否受到其他答案的启发,请将您的解决方案发布为答案并回滚对问题的编辑。 【参考方案1】:代码没有说明currentRow
的值是什么,但findItems
没有设置它,因此它不太可能与您尝试删除的值相关联。我看不到任何方法可以使用 findItems
的结果并获取要删除的行。我认为您必须遍历内容,比较每个项目的文本,然后删除匹配的内容。您可能希望以相反的顺序执行循环;否则,一旦您删除了一个项目,循环计数器将不再匹配列表项的行号。
【讨论】:
currentRow
是什么意思,这不是问题?
在您发布的代码中,调用是“takeItem (ui->listJobs->currentRow())”。这不可能是你想要的。
我最初发布的代码是基于对 qlistwidget api 的完全误解。根据您的建议,我发布的循环有效,非常感谢!
很高兴它有帮助。只要只有一项要查找和删除,您的解决方案就可以。如果有两个或更多,此循环将正确删除第一个,但其他循环可能会中断。例如,如果需要删除第 10 行和第 11 行,则第 10 行将被正确删除,然后第 11 行立即成为新的第 10 行。但是您的循环将增加到 11,并且永远不会匹配以前的 11 行。您可以通过反转循环并倒计时到 0 来解决此问题。
从最初的问题转移:根据@goug 的回答,我测试了这个例程并且它有效。 for(int i = 0; i listJobs->count(); ++i) QString str = ui->listJobs->item(i)->text(); if (str==mstring) 删除 ui->listJobs->item(i); 以上是关于通过文本内容删除 QListWidget 项的主要内容,如果未能解决你的问题,请参考以下文章