QT5知识:字符串列表QStringListModel

一、QStringListModel介绍


        QStringListModel是Qt提供的一个已经实现QAbstractItemModel相关接口的Model,适合于展示一系列字符串的简单视图如QListView对象和QComboBox对象。

        QStringListModel提供了所有可编辑模型的标准函数,将字符串列表中的数据存储为一个一列多行的模型。换个说法,符号串的列表无法直接传入QListView对象和QComboBox,需要QStringListModel做为中间传递过程。(如下图)

         使用index(int row, int column = 0, QModelIndex parent = QModelIndex())函数获取与项对应的模型索引,使用flags(QModelIndex index)获取项标志;使用data()函数读取项数据,并使用setData()写入项数据,使用rowCount()函数访问模型数据的行数。

        该模型可以用现有的字符串列表来构造,或者可以用setStringList()函数来设置字符串。字符串也可以用insertRows()函数以通常的方式插入,并用removeRows()删除。字符串列表的内容可以使用stringList()函数检索。

二、使用QStringListModel作为QListView的Model


        使用QStringListModel作为QListView的Model的方法非常简单,先创建QStringListModel实例对象,如果数据未存储到Model中则将数据存储到Model,然后再将QListView对象的Model设置为刚创建的Model实例。步骤如下:

2.1、 创建QStringListModel实例对象

实例对象创建有两种方法:

  •  创建无数据的Model

语法为:QStringListModel(QObject parent = None)

  •  创建Model同时初始化数据

语法为:QStringListModel(strings,QObject parent = None)
其中strings为要展示的字符串列表数据。
以上两种方法的实例代码:

self.model1 = QStringListModel()
strList = ["item1", "item2", "item3", "item4", "item5"]
self.model2 = QStringListModel(strList)

        只是以上方法创建model后,model1中无数据,而model2中有数据

2.2、初始化model中的数据


如果创建的model中无数据,可以通过几种方法初始化model中的数据:

 使用setStringList(str)方法完成初始化,示例代码:
self.model1.setStringList(["item1", "item2", "item3", "item4", "item5"])

使用insertRows()、index()、setData()方法组合实现
insertRows是在model中插入空的数据记录,只是占据了数据位置,但没有实际的数据,需要通过setData来生成实际存储的数据。这种组合方法没有多大实际价值,具体方法的参数及含义在此不进行详细介绍,请参考如下示例代码:

        self.model = QStringListModel()
        self.model.insertRows(0,3)
        for i in range(4):
            index = self.model.index(i-1)
            self.model.setData(index,f"item{i}")

使用视图的setModel(model)方法将model和view建立连接
示例代码:
                    self.listView.setModel(self.model)
 

2.3、示例代码及运行截图


本示例代码使用先创建对象再使用setStringList方法初始化数据:

 def initStringListModel(self):
        strList = ["item1", "item2", "item3", "item4", "item5", "item6"]
        self.model = QStringListModel()
        self.model.setStringList(strList )
        self.listView.setModel(self.model)

完整案例:

from PyQt5.QtWidgets import QApplication,QWidget,QHBoxLayout,QListView,QAbstractItemView
from PyQt5.QtCore import QStringListModel


if __name__ == '__main__':
    import sys
    app =  QApplication(sys.argv)
    widget = QWidget()
    layout = QHBoxLayout()
    listModel = QStringListModel()
    listView = QListView()

    nameList = ["ZheDong Mao","RenLai Zhou","XiaoPing Deng","ShaoQi Liu","De Zhu","DeHuai Peng"]
    listModel.setStringList(nameList)
    listView.setModel(listModel)

    listView.setEditTriggers(QAbstractItemView.AnyKeyPressed | QAbstractItemView.DoubleClicked)
    layout.addWidget(listView)
    widget.setWindowTitle("QStringListModel");
    widget.setLayout(layout);
    widget.show()
    app.exec()

运行截图:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值