最近的程序开发中,涉及到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;