qt listview详细用法(listview添加多列)

QListView简介

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

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

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

QListView是Model-View框架中的一个类,是Qt Model-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类继承关系:

实战PyQt5: 071-列表视图QListView实战PyQt5: 071-列表视图QListView

测试QListView

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

importsys,os
fromPyQt5importQtCore,QtGui,QtWidgets
fromPyQt5.QtCoreimportQt
fromPyQt5.QtGuiimportQIcon,QStandardItem,QStandardItemModel
fromPyQt5.QtWidgetsimport(QApplication,QWidget,QListView,
QLabel,QVBoxLayout)

classDemoListView(QWidget):
def__init__(self,parent=None):
super(DemoListView,self).__init__(parent)

#设置窗口标题
self.setWindowTitle('实战PyQt5:QListViewDemo!')
#设置窗口大小
self.resize(480,360)

self.initUi()

definitUi(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':'排球'}
]

forsportinself.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'])

defonListViewClicked(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())

运行结果如下图:实战PyQt5: 071-列表视图QListView实战PyQt5: 071-列表视图QListView

测试QListView

本文知识点

  • 使用QStandardItemModel作为视图的模型;
  • 使用QStandItem为QStandardItemModel添加条目;
  • 为QStandItem条目添加一个图标和文字信息。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至624739273@qq.com举报,一经查实,本站将立刻删除。
Like (0)
柳的头像

相关推荐

发表回复

Please Login to Comment
微信
微信
SHARE
TOP
要想花得少,就用购宝。话费电费9折起,官方公众号:购宝