美文网首页PySide2 Tutorial
PySide2学习记录(十六):QModelIndex

PySide2学习记录(十六):QModelIndex

作者: 3ni | 来源:发表于2018-12-23 15:35 被阅读0次

    Python版本3.7
    PySide2 Version: 5.14.1
    官方文档:QModelIndex

    之前在Model/View Programming中提到view和model,数据都放在model,那么如何定位model中的数据呢,这样model[0] ?肯定是不对的,Qt专门弄了一个类来定位model中的数据,即QModelIndex类,看看如何使用吧。

    首先需要了解一个视图都有哪些结构,如图:

    图1

    从图中可以看出第一个只需要一个根节点,然后每一行的索引就行了。然后第二个多一个列的索引就可以了。第三个就有点复杂了,因为它成一个树型,所以一个节点会有父母和孩子的信息,所以仅仅行和列的索引不能够准确描述一个节点的位置,需要再增加父母和孩子的信息才能准确定位一个元素。下面只看最简单的,其它举一反三即可。

    代码:

    from PySide2.QtWidgets import QApplication, QWidget, QListView, QVBoxLayout
    from PySide2.QtCore import QStringListModel
    
    
    app = QApplication()
    window = QWidget()
    window.setFixedSize(400, 300)
    
    # 生成一个view
    listview = QListView(window)
    # 生成一个model
    model = QStringListModel()
    
    # model添加数据
    model.setStringList(['1', '2', '3', '4', '5'])
    
    # view设置model
    listview.setModel(model)
    
    print(type(model.index(0, 0)))
    value = model.index(2, 0).data()
    print(value)
    
    print(model.data(model.index(3, 0)))
    
    layout = QVBoxLayout()
    layout.addWidget(listview)
    
    window.setLayout(layout)
    window.show()
    app.exec_()
    
    

    上面结果图:

    图2
    print(type(model.index(0, 0)))
    value = model.index(2, 0).data()
    print(value)
    

    在model类中有一个经常用的方法叫index(row, column[, parent=QModelIndex()])参数parent为可选,因为这里只有行元素,所以这里不用。只用前面两个row和column,即行和列,如果只有行,则column设置为0就可以了,如果只有列,同理。可以看到用model类中的index方法返回一个QModelIndex类型,然后可以使用QModelIndex类中的data()方法来访问数据。

    print(model.data(model.index(3, 0)))
    

    当然在model类中可以直接使用data(index[, role=Qt.DisplayRole])方法来访问元素。
    第一个参数为QModelIndex类型,第二个可选,暂时不用。

    注意上面中的data方法一个是QModelIndex类里面的方法,一个是model类(QStringListModel类)里面的方法,不要弄混了。

    QModelIndex类中的row()column()方法,用于返回目前定位的元素位置,一个返回行,一个返回列。
    QModelIndex类中的parent()返回当前节点的父母的节点。
    QModelIndex类中还有一个child(row, column)方法,但是文档建议使用model类(QAbstractItemModel类)里面的index()方法。

    其它更多用法建议参考官方文档。

    相关文章

      网友评论

        本文标题:PySide2学习记录(十六):QModelIndex

        本文链接:https://www.haomeiwen.com/subject/laczqqtx.html