die Konstellation des &-Operators mit dem >-Operator verhält sich bei mir unter Windows 7 anders, als unter Ubuntu. Wenn ich ein Qt.ItemFlags-Objekt mit & auf den Flag Qt.ItemIsEditable prüfe und dieser enthalten ist, sollte dieser Flag das Ergebnis des Tests sein. Mit dem Vergleichsoperator == kann man das prüfen. Aber es geht auch mit weniger Schreibaufwand, indem einfach auf "> 0" geprüft wird. Das ist valide, weil der fragliche Flag in diesem Fall 2 ist. Unter Ubuntu ergibt das in der Tat einen wahren Ausdruck. Unter Windows aber nicht. Dort muss ich das ItemFlags-Objekt explizit in ein int(...) setzen, damit auch der >-Vergleich richtig arbeitet.
Weiss jemand, warum das so ist?
Hier ein kleines Beispielprogramm, dass die Sachlage verdeutlicht.
Code: Alles auswählen
from PyQt4.QtCore import Qt
flags = Qt.ItemFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable)
print Qt.ItemIsEditable
# Windows: True, Ubuntu: True
print (flags & Qt.ItemIsEditable) == Qt.ItemIsEditable
# Windows: False (???), Ubuntu: True
print (flags & Qt.ItemIsEditable) > 0
# Windows: True, Ubuntu: True
print int(flags & Qt.ItemIsEditable) > 0