智慧印刷工坊

智慧印刷工坊

实战PyQt5: 071-列表视图QListView

admin 153 15


QListView简介

QListView列表视图可以用来以列表的形式来展示数据。在Qt中使用Model-View结构来处理数据与视图之间的关系,Model负责数据的存取,View负责数据的展示,二者之间数据的交互则是通过委托(delegate)来实现。

QT提供了一些现成的models用于处理数据项:

QStringListModel用于存储简单的QString列表;

StandardItemModel管理复杂的树型结构数据项,每项都可以包含任意数据;

QDirModel提供本地文件系统中的文件与目录信息;

QSqlQueryModel,QSqlTableModel,QSqlRelationTableModel用来访问数据库;

QListView是Model-View框架中的一个类,是QtModel-View框架的组成部分,QListView实现了QAbstractItemView类定义的接口,以使其能够显示从QAbstractItemModel类派生的模型提供的数据。

QListView常用方法:

setModel():用来设置View所关联的Model,可以使用Python原生的list作为数据源Model;

selectedItem():选中Model的条目;

isSelected():判断Model中的某条目是否被选中;

setViewMode():设置视图模式。(ListMode:条目从上到下布局,小尺寸显示,IconMode:条目从左到右布局,大尺寸显示)

QListView常用信号:

clicked:单击某项时,发射此信号;

doubleClicked:双击击某项时,发射此信号;

activated:当用户激活index指定的项目时,发射此信号;

entered:当鼠标光标进入index指定的项目时,发射此信号;

iconSizeChanged:在视图可见时设置此图标大小时,发射此信号;

indexesMoved:在视图中移动索引时,发射此信号;

pressed:按下鼠标按钮时,发射此信号;

viewportEntered:当鼠标光标进入视图时,发射此信号。

QListView类继承关系:


测试QListView

使用QStandardItemModel作为QListView所使用的模型,在QStandardItemModel中每个QStandardItem条目添加一个图标和文本。完整代码如下:

importsys,osfromPyQt5importQtCore,QtGui,,QStandardItem,(QApplication,QWidget,QListView,QLabel,QVBoxLayout)classDemoListView(QWidget):def__init__(self,parent=None):super(DemoListView,self).__init__(parent)设置窗口大小(480,360)()definitUi(self):vLayout=QVBoxLayout(self)lv=QListView(self)slm=QStandardItemModel()=[{'img':'/images/','title':'篮球'},{'img':'/images/','title':'足球'},{'img':'/images/','title':'橄榄球'},{'img':'/images/','title':'排球'}]:item=QStandardItem(QIcon((__file__)+sport['img']),sport['title'])(item)(slm)()=QLabel(self)(lv)()(vLayout)显示选中的x信息('当前选择为:'+[()]['title'])if__name__=='__main__':app=QApplication()window=DemoListView()()(())

运行结果如下图:

测试QListView

本文知识点

使用QStandardItemModel作为视图的模型;

使用QStandItem为QStandardItemModel添加条目;

为QStandItem条目添加一个图标和文字信息。