Qt DropActions:什么是ActionMask?

时间:2014-11-23 14:13:01

标签: python qt pyqt pyside

您可以使用通常的标志位掩码设置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行动感到困惑。我没有找到任何关于它的讨论(例如,herehere),甚至没有使用它的任何例子(例如在Nullege)。其值为 11111111 ,因此,只要您使用任何其他dropAction按位or,您就会再次使用ActionMask

那么,ActionMask是什么?什么时候使用?它在哪里记录?

修改

正如在接受的答案中指出的那样,我在枚举中遗漏了一个DropAction,这可能是关键:

TargetMoveAction    0x8002 (32770 in dec, 1000000000000010 in bin)

1 个答案:

答案 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函数}。做到这一点你会...