您可以使用通常的标志位掩码设置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 ,因此,只要您使用任何其他dropAction按位or
,您就会再次使用ActionMask
。
那么,ActionMask
是什么?什么时候使用?它在哪里记录?
修改
正如在接受的答案中指出的那样,我在枚举中遗漏了一个DropAction,这可能是关键:
TargetMoveAction 0x8002 (32770 in dec, 1000000000000010 in bin)
答案 0 :(得分:1)
通常,掩码是用于包含或排除其他值的某些位的值,使用按位运算。
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
函数}。做到这一点你会...