How using Bitwise OR operator in item.flags() | QtCore.Qt.ItemIsEditableQtCore
in the following code prevents item.flags
from being overwritten? I know how Bitwise OR works on numbers but i can't make sense of its use here:
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_())
These flags are stored as powers of 2, so they are for example
1, 2, 4, 8, ...
. If you convert these into the dual base you see them as0001, 0010, 0100, 1000, ...
.If you now have the flag value
item.flags()
and combine it with the bitwise or|
withQtCore.Qt.ItemIsEditable
you are creating a new value, which has (as an example) this dual base representation:So it is just the normal bitwise or operator, between an integer number and the integer values of the
Qt
enumThis means especially, that if the
item.flags()
value has stored some flags already, you can add more flags with this|
operator, without unsetting/overwriting the information of the previous set flags; this allows you to store information about multiple flags in just one integer value.