您可以使用标志的常用位掩码设置dropActions
。来自 the docs ,我们有以下可能的放置操作:
Action Value Result
Qt::CopyAction 0x1 (1) Copy the data to the target.
Qt::MoveAction 0x2 (2) Move the data from the source to the target.
Qt::LinkAction 0x4 (4) Create a link from the source to the target.
Qt::ActionMask 0xff (255) [none given in docs]
Qt::IgnoreAction 0x0 (0) Ignore the action (do nothing with the data).
我对 ActionMask
操作感到困惑。我还没有找到任何关于它的讨论(例如 here 或 here ),甚至没有找到任何正在使用的示例(例如在 Nullege)。它的值是11111111,所以任何时候你将它与任何其他dropActions按位或
,你都会再次得到ActionMask
。
那么,ActionMask
的用途是什么?什么时候使用?它记录在哪里?
编辑:
正如已接受的答案中所指出的,我在枚举中遗漏了一个 DropAction,这可能是关键:
TargetMoveAction 0x8002 (32770 in dec, 1000000000000010 in bin)
一般来说,掩码是用于使用按位运算包含或排除另一个值的某些位的值。
DropAction enum 的定义包含另一个标志:
Qt::TargetMoveAction 0x8002
超出了掩码的范围。因此掩码可用于筛选出此类值,如下所示:
>>> from PySide.QtCore import Qt
>>> a = Qt.CopyAction | Qt.TargetMoveAction
>>> int(a)
32771
>>> int(a & Qt.ActionMask)
3
反之亦然:
>>> int(a & ~Qt.ActionMask)
32768
至于为什么会使用它:Qt4 在其源代码中的一个位置使用了它,即 gui/kernel/qmotifdnd_x11.cpp 中的 QtDropActionToDndOperation
函数。充分利用它,您将...
我是一名优秀的程序员,十分优秀!