我有一个QTreeWidget与QTreeWidgetItems.方法QTreeWidgetItem.flags()返回Qt.ItemFlags实例.
该Qt.ItemFlags类型是QFlags一个typedef.它存储ItemFlag值的OR组合.
那么,现在假设我有一个我的QTreeWidgetItems,我需要找出 - 它是否可以检查?换句话说,我需要在Qt.ItemFlags实例中找到出现ItemFlag(对于我的情况,它是Qt.ItemIsUserCheckable).
怎么做?
这是一个简单而整洁的示例,您可以修改(由注释行标记的感兴趣部分):
import sys
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.treeWidget = QtGui.QTreeWidget()
self.treeWidget.setHeaderHidden(True)
self.addItems(self.treeWidget.invisibleRootItem())
self.treeWidget.itemClicked.connect (self.handleClicked)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.treeWidget)
self.setLayout(layout)
def addItems(self, parent):
column = 0
clients_item = QtGui.QTreeWidgetItem(parent, ['Clients'])
clients_item.setData(column, QtCore.Qt.UserRole, 'data Clients')
clients_item.setExpanded(True)
item_1 = QtGui.QTreeWidgetItem(clients_item, ['Item 1'])
item_1.setData(column, QtCore.Qt.UserRole, 'data Item 1')
item_1.setCheckState(column, QtCore.Qt.Unchecked)
item_2 = QtGui.QTreeWidgetItem(clients_item, ['Item 2'])
item_2.setData(column, QtCore.Qt.UserRole, 'data Item 2')
item_2.setCheckState(column, QtCore.Qt.Unchecked)
def handleClicked(self, item, column):
if item.checkState(column) == QtCore.Qt.Checked:
print "checked", item, item.text(column)
if item.checkState(column) == QtCore.Qt.Unchecked:
print "NOT checked", item, item.text(column)
# this part doesn't work ===============================
# begin of part
flags = item.flags()
if QtCore.Qt.ItemIsUserCheckable in flags:
print "is checkable", item, item.text(column)
else:
print "is NOT checkable", item, item.text(column)
# end of part ==========================================
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
jdi*_*jdi 23
与Qt中的许多"标志"和"属性"一样,ItemFlags
使用位掩码将多个选项组合成单个值.这可以使用按位运算符进行测试.
以下是检查项目是否可检查的方法:
flags = item.flags()
if flags & QtCore.Qt.ItemIsUserCheckable:
print "is checkable", item, item.text(column)
Run Code Online (Sandbox Code Playgroud)
它的工作原理如下:
Qt.NoItemFlags 0 It does not have any properties set.
Qt.ItemIsSelectable 1 It can be selected.
Qt.ItemIsEditable 2 It can be edited.
Qt.ItemIsDragEnabled 4 It can be dragged.
Qt.ItemIsDropEnabled 8 It can be used as a drop target.
Qt.ItemIsUserCheckable 16 It can be checked or unchecked by the user.
Qt.ItemIsEnabled 32 The user can interact with the item.
Qt.ItemIsTristate 64 The item is checkable with three separate states.
Run Code Online (Sandbox Code Playgroud)
因此,该值将是这些值的某种组合.让我们说它是可选择的,可编辑的和启用的.为简单起见,我将只使用数值而不是标志.我们将它们与逻辑OR结合起来:
flags = 1 | 2 | 32
# 35
Run Code Online (Sandbox Code Playgroud)
为了测试值的存在,我们使用逻辑AND:
# is it editable?
flags & 2
# 2 # would evaluate to True
# is it checkable?
flags & 16
# 0 # would evaluate to False
Run Code Online (Sandbox Code Playgroud)
您还可以使用XOR操作切换mak中的flags状态.
# toggle off the editable flag
flags ^= 2
# toggle on the editable flag
flags ^= 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8699 次 |
最近记录: |