按位或类对象

时间:2017-09-05 15:03:05

标签: python qt pyside bitwise-or

如何在以下代码中使用 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_())

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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