[英]C++ Delete a Custom Widget From QListWidget
我到處都在尋找這個問題,但似乎沒人能找到答案。 我使用setItemWidget在QListWidget中添加了QProgressWidget。 我目前正在嘗試通過按一下按鈕刪除進度條。
我打算讓列表小部件看起來像這樣
這是我用來插入名稱和qprogress欄的代碼
//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-th item
,第(i+1)-th item
將成為第i-th item
,第(i+2)-th
項目將成為第(i+1)-th item
。 這就是為什么您在代碼中刪除了2個QString
的原因。
for (int i = 0; i <ui->budget_list_2->count(); i++){
if (ui->budget_list_2->item(i)->text() == remove)
{
//remove (i+1)-th item first
auto barItem = ui->budget_list_2->item(i + 1);
if (barItem)
{
//delete bar widget
auto bar = (QProgressBar*)ui->budget_list_2->itemWidget(barItem);
if (bar)
{
bar->deleteLater();
}
//remove and delete bar item
delete ui->budget_list_2->takeItem(i + 1);
}
//remove string from ui->budget_list_2
auto strItem = ui->budget_list_2->takeItem(i);
if (strItem)
{
delete strItem;
}
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.