簡體   English   中英

C ++從QListWidget刪除自定義小部件

[英]C++ Delete a Custom Widget From QListWidget

我到處都在尋找這個問題,但似乎沒人能找到答案。 我使用setItemWidget在QListWidget中添加了QProgressWidget。 我目前正在嘗試通過按一下按鈕刪除進度條。

我打算讓列表小部件看起來像這樣

1個

這是我用來插入名稱和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項目和進度條時,我得到了

2

由於我將兩個項目接連插入,因此我假設它們的位置是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM