qtlistwidget和qtlistview都是用于在界面成行/成列的显示数据的;
两者的区别在于:
1、qtlistview可以用使用model,更便于动态添加数据,而qtlistwidget只能一条一条的增加列表项进行显示数据(使用QStringList进行批量增加数据,但很难实现想要的动态添加数据的效果)
2、QListView继承于QAbstractItemView,QListWidget继承于QListView
qtlistwidget
1、添加列表项
使用QListWidgetItem依次添加item:
使用 QStringList列表批量添加列表项:
2、删除数据
删除单行数据:
currentItem获取到当前listwidget选中的item
在listwidget需要实现删除多行数据之前要实现item能被选中,且listwidget支持多选操作,后面会讲解item选中与listwidget支持多行选中的操作。
删除多行数据:
删除所有的数据:
3、插入子列表
添加样式窗口:
添加自定义窗口类:
cpp文件
ui设计:
listwidget使用:
右键拓展菜单项:
先设置自定义菜单策略
添加菜单项(实现customContextMenuRequested的槽函数):
使用label控件显示选中的项目文本与序号:
在有些项目要求中需要显示选中的项目的序号与文本进行提醒(实现currentRowChanged的槽函数,每选中一个新的行便会发送一次信号进行显示)
QListView
在 QListView中是无法使用 QListWidgetItem 和QStringList类进行添加列表项目,自己可以试验一下哦,在QListView中使用QStringListModel或者继承QAbstractListModel类生成自定义的数据模型,在这里就不自定义数据模型了,使用QStringListModel来做一些简单的数据示范,感兴趣的话可以自己上网搜索一下自定义数据模型的生成与使用。
1、添加列表项
使用QStringListModel作为数据模型添加到QListView中去(这里还未设置数据显示代理,所以显示的是默认的代理样式)
2、删除数据(在QListView中由于数据源都来自于model,所以这些实验所有的数据改变都会同步到model中)
删除单行数据:
删除多行数据
在对数据源进行更新的时候要从后往前删除,因为从前往后删除会导致数据的序列号发生变化,删除上面的一个元素之后下面的元素会顺位往前走一位,那么,后续的数据源与列表项序号无法对应
清空数据
4、使用代理的item代理样式类
.h文件:继承QStyledItemDelegate类重写paint进行图形绘制
cpp文件
name :就是刚刚加入的strList内的数据
使用时踩过的坑:
多选与单选
在qtlistwidget中都实现了多行删除的功能,其基础是item与list都支持多选。在使用qtlistwidget的过程中如果是使用QListWidgetItem添加子项的话,要让item支持选中功能
item支持选中:
qtlistwidget和qtlistview支持选中:
拖拽:
在使用自定义的窗口样式进行添加项目时,使用setAcceptDrops设置为false且窗口样式类this->setWindowFlags(Qt::FramelessWindowHint);之后发现子项目还是可以拖拽,改动了很多个地方,结果发现将视图模式设置成了IConmodel,目前还不知道为啥设置为视图模式就可以拖拽,但是不为视图模式之后就禁止掉拖拽了(ui->listWidget->setViewMode(QListView::IconMode))
2、常用属性设置
qtlistwidget常用属性设置:
重要属性:setViewMode可将item设置为图标模式(图标在上,文字在下);一般情况下如果不特意对其进行设置的话图片在左,文字在右
item属性设置--