按位或在 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 先前设置的信息旗帜;这允许您将有关多个标志的信息存储在一个整数值中。
如何在以下代码中的 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 先前设置的信息旗帜;这允许您将有关多个标志的信息存储在一个整数值中。