【发布时间】:2018-07-27 11:34:28
【问题描述】:
我一直在到处寻找这个问题,但似乎没有人有答案。我使用 setItemWidget 在 QListWidget 中添加了 QProgressWidget。我目前正在尝试通过按一下按钮来删除进度条。
我打算让列表小部件看起来像这样
这是我用来插入名称和进度条的代码
//append qstring
ui->budget_list_2->addItem(expense_name);
//append qprogress bar
ui->budget_list_2->addItem(tmp);
ui->budget_list_2->setItemWidget(tmp, bar);
这是我用来删除这两个项目的代码
for(int i = 0; i < ui->budget_list_2->count(); i++){
if(ui->budget_list_2->item(i)->text() == remove){
tmp = ui->budget_list_2->takeItem(i);
delete tmp;
tmp = ui->budget_list_2->takeItem(i+1);
delete tmp;
//delete prog_bars.take(remove);
break;
}
}
但是当我去删除 qstring 项目和进度条时,我得到了这个
由于我一个接一个地插入这两个项目,我假设它们的位置是 i 和 i+1 但我很明显我错了。谁能告诉我如何删除插入到 QListWidget 中的小部件?
【问题讨论】:
-
那么,删除文本后,进度条的索引会发生什么变化?尝试重用 i 或以相反的顺序删除它们...
-
澄清一下,您想同时删除进度条和 QString 吗?如果是这种情况,是否可以更改您当前的实现,使budget_list_2 仅包含条形和qstring?如果您能够进行修改,删除它们将变得像遍历列表并从中删除所有内容一样简单。
-
@Thomas 哦,我明白了,这很有意义。根据我的理解,您所说的是在 takeItem(i) 之后,我将自动成为进度条的位置,我需要做的就是执行 takeItem(i) 并正确删除两次?
-
@Lucas 是的,这是一种方法。