因为我们不能QListWidget
在 Qt 4.8 中自动迭代 3 个状态(ItemIsUserTristate
在 Qt 5.5 中添加了标志),我们将手动进行:
CHECKSTATE_ROLE = 32
def lstFiles_itemChanged(self, item): # slot
if item.flags() & QtCore.Qt.ItemIsTristate:
if item.checkState() == QtCore.Qt.Checked and \
item.data(CHECKSTATE_ROLE) == QtCore.Qt.Unchecked:
item.setCheckState(QtCore.Qt.PartiallyChecked)
item.setData(CHECKSTATE_ROLE, item.checkState())
item = QtGui.QListWidgetItem("Buenas noches")
if this_item_needs_tristate:
item.setFlags(item.flags() | QtCore.Qt.ItemIsTristate)
state = QtCore.Qt.PartiallyChecked
else:
state = QtCore.Qt.Checked
item.setCheckState(state)
item.setData(CHECKSTATE_ROLE, item.checkState())
一个项目会在用户数据元素中记住其先前的检查状态,因此我们可以在 上适当地更改状态itemChanged
。