2017-09-05 15 views
0

객체? 나는 비트 단위 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

비트 OR이 어떻게 작동하는지 알면 현재 플래그를 얻은 다음 OR 플래그로 새 플래그를 알아야하며 원래 플래그 + 새 플래그로 새 플래그 값을 만듭니다 ... – RvdK

답변

1

이러한 플래그는 2의 거듭 제곱으로 저장됩니다, 그래서 그들은 예를 1, 2, 4, 8, ...을위한 것입니다. 이중베이스로 변환하면 0001, 0010, 0100, 1000, ...으로 표시됩니다.

이제 플래그 값 item.flags()을 가지고 QtCore.Qt.ItemIsEditable 당신이 (예를 들어)가 새로운 값을 생성하는이 이중 기본 표현과 비트 또는 |와 결합하는 경우 : 그래서 그것을

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

단지 정상 비트 OR 연산자는 정수 이것이 의미 Qt ENUM

의 정수 값 사이, 특히 상기 item.flags() 값이 이미 몇몇 플래그를 저장하는 경우, 이전에 설정된 플래그의 정보를 설정 해제하거나 덮어 쓰지 않고이 | 연산자로 더 많은 플래그를 추가 할 수 있습니다. 이렇게하면 정수 값 하나에 여러 플래그에 대한 정보를 저장할 수 있습니다.