模型中dropActions的访问值(PySide/PyQt/Qt)

模型中dropActions的访问值(PySide/PyQt/Qt),qt,qt4,pyqt,pyside,Qt,Qt4,Pyqt,Pyside,在QTableModel中,当我输入以下内容时: print model.supportedDropActions() 我刚刚得到: <PyQt4.QtCore.DropActions object at 0x00000000081172E8> 如何从该对象访问受支持的拖放操作的实际列表?在,它说,“DropActions类型是QFlags的typedef。它存储一个或多个DropAction值。” 注意,我是用Python(PySide)完成这项工作的 相关帖子: 背景

在QTableModel中,当我输入以下内容时:

print model.supportedDropActions()
我刚刚得到:

<PyQt4.QtCore.DropActions object at 0x00000000081172E8>

如何从该对象访问受支持的拖放操作的实际列表?在,它说,“DropActions类型是QFlags的typedef。它存储一个或多个DropAction值。”

注意,我是用Python(PySide)完成这项工作的

相关帖子:


    • 背景

      首先,确保您了解这些标志的按位编码是如何工作的。这里的公认答案中有非常好的描述:

      每个使用Qt的人及其亲属都应该阅读它们,如果你想从按位编码的值中提取信息,它们将省去很多麻烦

      解决方案

      虽然以下内容不适用于删除操作,但适用于项目数据角色,其原则完全相同。正如在原始帖子的评论中提到的,您可以将编码值重新编码为
      int
      ,然后使用Qt online提供的枚举(即整数和角色之间的转换)将其解码为人类可读的格式。我不知道为什么有时候文档把整数表示成十六进制和小数

      在下面的内容中,我用
      int
      作为键,人类可读的字符串描述作为值在字典中表示。然后使用将角色转换为
      int
      的函数,使用该字典进行翻译

      #Create a dictionary of all data roles
      dataRoles = {0: 'DisplayRole', 1: 'DecorationRole', 2: 'EditRole', 3: 'ToolTipRole',\
                  4: 'StatusTipRole', 5: 'WhatsThisRole', 6: 'FontRole', 7: 'TextAlignmentRole',\
                  8: 'BackgroundRole', 9: 'ForegroundRole', 10: 'CheckStateRole', 13: 'SizeHintRole',\
                  14: 'InitialSortOrderRole', 32: 'UserRole'} 
      
      #Return role in a human-readable format
      def roleToString(flagDict, role):
          recastRole = int(role)  #recast role as int
          roleDescription = flagDict[recastRole]
          return roleDescription
      
      然后使用它,例如在一个模型中,角色被抛出,我想看看它在做什么:

      print "Current data role: ", roleToString(dataRoles, role)
      

      有不同的方法,但我觉得这非常直观且易于使用。

      正如文档所说,它只是或将值组合在一起,所以将其转换为int。@ekhumoro对,所以它与任何其他标志一样,不是吗?好的,我可以用这个。我感到困惑的一点是,它们似乎被编码为十六进制(qt-project.org/doc/qt-4.8/qt.html#DropAction enum)。为什么有些枚举整数在文档中用十六进制表示,而另一些则用标准十进制表示?这有关系吗?我的直觉是这不重要,因为当你做按位或/和运算时,它们都是以二进制进行比较的。但是如果是这样的话,为什么文档不只是使用一个约定呢?我不确定,但我猜十六进制的是要放在一起的,而其他的只是不透明的枚举值。是的,看起来文档中的值格式没有真正的一致性。然而,在明确说明这些值是否打算一起使用时,似乎存在一致性。但是,具体的值是完全不相关的:只有常量名称才是真正重要的。C++枚举的值总是某种类型的积分,因此总是可以对它们执行按位运算。但是无法从枚举类型或实际值来判断它们是否可以有效地结合在一起——您只需阅读docs.PS:在PyQt中,枚举是python int类型的子类。