【发布时间】:2014-10-12 02:54:11
【问题描述】:
在 QTableModel 中当我输入以下内容时:
print model.supportedDropActions()
我刚刚得到:
<PyQt4.QtCore.DropActions object at 0x00000000081172E8>
如何从该对象访问支持的放置操作的实际列表?在the documentation,它说,“DropActions 类型是 QFlags 的 typedef。它存储 DropAction 值的 OR 组合。”
请注意,我在 Python (PySide) 中执行此操作。
相关帖子:
【问题讨论】:
-
正如文档所说,它只是将值组合在一起,因此将其转换为 int。
-
@ekhumoro 对,所以它就像任何其他标志一样,不是吗?好的,我可以使用它。我感到困惑的一件事是它们似乎被编码为十六进制(qt-project.org/doc/qt-4.8/qt.html#DropAction-enum)。为什么文档中的某些枚举整数以十六进制表示,而其他枚举整数则以标准十进制表示?有关系吗?我的预感是这无关紧要,因为当您执行按位或/和时,它们都以二进制形式进行比较。但如果是这样的话,为什么文档不只使用一个约定呢?
-
我不确定,但我猜想十六进制的应该是 OR'd 在一起,而其他的只是不透明的枚举值。
-
是的,看起来文档中值的格式并没有真正的一致性。但是,在明确说明这些值是否旨在 OR'd 在一起似乎确实存在一致性。但是,具体的值是严格无关的:只有常量 names 真正重要。 C++ 枚举的值总是某种整数类型,所以总是可能对它们执行按位运算。但是无法从枚举类型或实际值中判断它们是否可以有用 OR'd 在一起 - 你只需要阅读文档。
-
PS:在PyQt中,枚举是python的int类型的子类。