• PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag


    在Model中的项可以通过flags()方法查询对应项是否能被选择、拖拽或其他操作,对应的返回值类型为枚举类型Qt.ItemFlag及该枚举类型通过OR操作组合起来的类型Qt.ItemFlags。Qt.ItemFlag的取值及含义如下:

    在这里插入图片描述

    可以通过setFlags(Qt.ItemFlags flags) 来设置项的flags标记。

    注意:

    • itemFlag相关的设置是针对项的,与View中的拖放、编辑、选择等属性的设置是独立的,一个项能否进行拖放、编辑、选择等,要Model中的项和View的属性都要能支持拖放、编辑、选择。案例:
     def initMultiColumnModel(self):
            self.model = QStandardItemModel()
            for row in range(6):
                for col in range(5):
                    item = QStandardItem("row: {row},col: {col}".format(row=row + 1, col=col + 1))
                    item.setFlags(item.flags() | Qt.ItemIsUserCheckable|Qt.ItemIsUserTristate)
                    if  row==1 and col==0:item.setFlags(item.flags() & ( (Qt.ItemIsEditable|Qt.ItemIsDragEnabled)^0xff))
                    item.setData(True,Qt.CheckStateRole)
                    self.model.setItem( row, col,item)
            self.listView.setModel(self.model)
    

    上述方法代码中将项进行初始化,初始化后如果对应视图支持编辑和拖放,则第2行第1列的项不支持编辑和拖拽。

    • 如果想需要能进行复选操作,需要对该项设置适合的ItemFlag并初始化其状态值。上面案例的item.setData(True,Qt.CheckStateRole)就是完成复选框的初始化
    • 如果模型实现了hasChildren()方法并返回True但项设置了 Qt.ItemNeverHasChildren标记,则对项操作的结果是未知的

    老猿Python,跟老猿学Python!

  • 相关阅读:
    函数响应式编程
    RxSwift
    Swift 5.1 新语法
    MVVM
    SwiftUI 九
    SwiftUI 八
    SwiftUI制作View可嵌套组件
    Swift 5.1 新语法
    MVVM
    Linux系统修改hostname,不用重启
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/12235088.html
Copyright © 2020-2023  润新知