zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    JS中数字和字符相加相减问题
    学习JQGRID
    认识三层架构
    log4net.dll
    UML统一建模语言
    纳税服务系统【条件查询数据回显、分页】
    纳税服务系统【抽取BaseService、条件查询】
    Jquery总结图
    Hibernate逆向工程【PowerDesigner、idea环境下】
    纳税服务系统【信息发布管理、Ueditor、异步信息交互】
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/12235080.html
Copyright © 2011-2022 走看看