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类继承关系:
测试qlistview
使用qstandarditemmodel作为qlistview 所使用的模型,在qstandarditemmodel中每个qstandarditem条目添加一个图标和文本。完整代码如下:
import sys,os from pyqt5 import qtcore, qtgui, qtwidgets from pyqt5.qtcore import qt from pyqt5.qtgui import qicon, qstandarditem, qstandarditemmodel from 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
需要了解更多c/c++开发分享qt listview详细用法(listview添加多列),都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!
c/c++开发分享qt listview详细用法(listview添加多列)知识点
- 使用qstandarditemmodel作为视图的模型;
- 使用qstanditem为qstandarditemmodel添加条目;
- 为qstanditem条目添加一个图标和文字信息。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/1058581.html