Python 按位或在类对象上

Python 按位或在类对象上,python,qt,pyside,bitwise-or,Python,Qt,Pyside,Bitwise Or,在下面的代码中,如何在item.flags()| QtCore.Qt.ItemIsEditableQtCore中使用按位OR运算符防止覆盖item.flags?我知道按位OR是如何处理数字的,但我无法理解它在这里的用法: import sys from PySide import QtCore, QtGui if __name__ == "__main__": app = QtGui.QApplication(sys.argv) app.setStyle("cleanLooks

在下面的代码中,如何在
item.flags()| QtCore.Qt.ItemIsEditableQtCore
中使用按位OR运算符防止覆盖
item.flags
?我知道按位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、
。如果将其转换为双基,则会将其视为
0001001001000,

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

flag:           10001100 
ItemIsEditable: 01000000
------------------------
result:         11001100
所以它只是一个普通的按位or运算符,介于整数和
Qt
enum的整数值之间


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

如果您知道按位OR的工作方式,那么您应该知道获取当前标志,然后或使用新标志将使用原始标志+新标志创建新标志值。。。