• PyQt(Python+Qt)学习随笔:model/view架构中的QStringListModel


    一、QStringListModel介绍

    QStringListModel是Qt提供的一个已经实现QAbstractItemModel相关接口的Model,适合于展示一系列字符串的简单视图如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", "item6", "item7", "item8", "item9", "item10"]
    self.model2 = QStringListModel(strList)
    

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

    2.2、初始化model中的数据

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

    • 使用setStringList(str)方法完成初始化,示例代码:
    self.model1.setStringList(["item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item9", "item10"])
    
    • 使用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", "item7", "item8", "item9", "item10"]
            self.model = QStringListModel()
            self.model.setStringList(strList )
            self.listView.setModel(self.model)
    

    运行截图:
    在这里插入图片描述

    老猿Python,跟老猿学Python!

  • 相关阅读:
    oracle 处理找被删掉且提交了事务的数据
    java去除下划线并首字母大写
    假数据仓库-常见数据枚举(日期、月份、周几、星期几,前导零、Excel 列号)
    自然语言处理标注工具——Brat(安装、测试、使用)
    判断当前点击位置在不在某个区域内
    java调用C#程序集
    UE使用EditorUtilityWidget完成简单的编辑器内工具
    CodeForces 230B
    mac中安装启动使用jmeter步骤
    Ubuntu中samba配置过程
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/12235080.html
Copyright © 2020-2023  润新知