我有一个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_())