最近的程序開發中,涉及到QListWidget的簡單應用,其實QListView更爲好用和具有靈活性,但是其基於MVC模型,在工程中沒有這個經歷學習它了,就先用QListWidget湊合了。
我在工程中只用到了兩個函數,一個是添加項,一個是刪除項。
我的程序應用場景是C/S架構中的客戶端獲取其他在線客戶端Ip列表,我使用了:
this->ui->otherlistWidget->addItem(static_cast<QString>(info.ip));
很方便的插入一個Ip到列表。
我在工程中要經常對一直行數的某一項進行刪除
採取最簡單的QListWidgetItem * QListWidget::takeItem(int row)
QListWidgetItem *deletedItem=this->ui->otherlistWidget->takeItem(i);
delete deletedItem;
需要注意的是,第二句的內存刪除是一定要的,根據Qt文檔,takeItem只是在視圖(視覺)上實現了移除此項,但其實並沒有釋放內存。
當然,如果我們嚴格的按照QListWidgetItem->QListWidget來寫的話,可以使用void QListWidget::removeItemWidget(QListWidgetItem * item),這個函數可以同時移除項和釋放內存。
2015/4/6 0:31補充:
在項目中需要根據項的名字將列表控件某一項刪除,在不使用QListView的情況下的解決方法爲:
QList<QListWidgetItem *> list=this->ui->peerlistWidget->findItems(name,Qt::MatchExactly);
if(list.length()==0)
return ;
int row = this->ui->peerlistWidget->row(list[0]);
QListWidgetItem *item=this->ui->peerlistWidget->takeItem(row);
delete item;
item=NULL;