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!

原文地址:https://www.cnblogs.com/LaoYuanPython/p/12235088.html