按位或在 class 个对象上

bitwise or on class objects

如何在以下代码中的 item.flags() | QtCore.Qt.ItemIsEditableQtCore 中使用 Bitwise OR 运算符来防止 item.flags 被覆盖?我知道 Bitwise OR 如何处理数字,但我无法理解它在这里的用法:

import sys
from PySide import QtCore, QtGui

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setStyle("cleanLooks")

    #Data
    dataList = ["one", "two", "three", "four", "five"]

    #Creating item based QlistWidget
    listWidget = QtGui.QListWidget()
    listWidget.addItems(dataList)
    listWidget.show()

    #Make all items of the listWidget editable
    count = listWidget.count()
    for i in range(count):
        item = listWidget.item(i)
        item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)

    #Creating item based QComboBox
    comboBoxWidget = QtGui.QComboBox()
    comboBoxWidget.addItems(dataList)
    comboBoxWidget.show()

    sys.exit(app.exec_())

这些标志存储为 2 的幂,因此它们是例如 1, 2, 4, 8, ...。如果将它们转换为双基数,您会看到它们为 0001, 0010, 0100, 1000, ...

如果您现在拥有标志值 item.flags() 并将其与按位组合或 |QtCore.Qt.ItemIsEditable 组合,您正在创建一个新值,它具有(例如)这个双碱基表示:

flag:           10001100 
ItemIsEditable: 01000000
------------------------
result:         11001100

所以它只是正常的按位或运算符,介于整数和 Qt 枚举的整数值之间

这意味着,如果 item.flags() 值已经存储了一些标志,您可以使用此 | 运算符添加更多标志,而无需 unsetting/overwriting 先前设置的信息旗帜;这允许您将有关多个标志的信息存储在一个整数值中。