如何在以下代码中使用 item.flags() | QtCore.Qt.ItemIsEditableQtCore
中的按位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_())
答案 0 :(得分:1)
这些标志存储为2的幂,因此它们例如是1, 2, 4, 8, ...
。如果您将这些转换为双基础,则会将其视为0001, 0010, 0100, 1000, ...
。
如果您现在拥有标记值item.flags()
并将其与按位或|
与QtCore.Qt.ItemIsEditable
结合使用,则表示您正在创建一个新值,该值具有(例如)此双重基数表示:
flag: 10001100
ItemIsEditable: 01000000
------------------------
result: 11001100
这尤其意味着,如果item.flags()
值已经存储了一些标志,则可以使用此|
运算符添加更多标志,而不会取消/覆盖先前设置标志的信息;这允许您只在一个整数值中存储有关多个标志的信息。