qt listview详细用法 listview添加多列

QListView简介QListView列表视图可用于以列表形式显示数据。在Qt中,模型-视图结构用于处理数据和视图之间的关系。模型负责数据访问,视图负责数据显示,二者之间的数据交互通过

本文最后更新时间:  2023-03-09 17:06:02

QListView简介

QListView列表视图可用于以列表形式显示数据。在Qt中,模型-视图结构用于处理数据和视图之间的关系。模型负责数据访问,视图负责数据显示,二者之间的数据交互通过委托来实现。

QT为处理数据项提供了一些现成的模型:

QStringListModel 用于存储简单的QString列表;StandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据;QDirModel 提供本地文件系统中的文件与目录信息;QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用来访问数据库;

QListView是模型-视图框架中的一个类,是Qt模型-视图框架的一个组件。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

使用qstandarditemodel作为QListView使用的模型,并向每个qstandarditemodel条目添加图标和文本。完整的代码如下:

import sys,osfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qtfrom PyQt5.QtGui import QIcon, QStandardItem, QStandardItemModelfrom PyQt5.QtWidgets import (QApplication, QWidget, QListView, QLabel, QVBoxLayout) class DemoListView(QWidget): def __init__(self, parent=None): super(DemoListView, self).__init__(parent) # 设置窗口标题 self.setWindowTitle('实战PyQt5: QListView Demo!') # 设置窗口大小 self.resize(480, 360) self.initUi() def initUi(self): vLayout = QVBoxLayout(self) lv = QListView(self) slm = QStandardItemModel() self.sports = [ {'img':'/images/basketball.png', 'title':'篮球'}, {'img':'/images/football.png', 'title':'足球'}, {'img':'/images/rugby-ball.png', 'title':'橄榄球'}, {'img':'/images/valley-ball.png', 'title':'排球'} ] for sport in self.sports: item = QStandardItem(QIcon(os.path.dirname(__file__) + sport['img']), sport['title']) slm.appendRow(item) lv.setModel(slm) lv.clicked.connect(self.onListViewClicked) self.label = QLabel(self) vLayout.addWidget(lv) vLayout.addWidget(self.label) self.setLayout(vLayout) #设置选中第一行 lv.setCurrentIndex(slm.index(0, 0)) self.label.setText('当前选择为: ' + self.sports[0]['title']) def onListViewClicked(self, index): #显示选中的x信息 self.label.setText('当前选择为: ' + self.sports[index.row()]['title']) if __name__ == '__main__': app = QApplication(sys.argv) window = DemoListView() window.show() sys.exit(app.exec())

运行结果如下图:

运行结果如下:

测试QListView

本文的知识点

使用QStandardItemModel作为视图的模型;使用QStandItem为QStandardItemModel添加条目;为QStandItem条目添加一个图标和文字信息。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。