Qt 4.8。我需要列表中的一些项目才能拥有3个州。所以我添加以下代码:
item = QtGui.QListWidgetItem("Hello there")
item.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsTristate)
item.setCheckState(QtCore.Qt.PartiallyChecked)
项目在创建时已成功设置为部分检查状态,但进一步鼠标单击会在已检查 / 未选中状态之间切换。< / p>
答案 0 :(得分:1)
QtCore.Qt.ItemIsTristate
,它被ItemIsAutoTristate
取代,后者会自动处理包含子项的项目的部分检查状态。
从Qt 5.5起,您可以使用QtCore.Qt.ItemIsUserTristate
来获得所需的行为。
答案 1 :(得分:1)
'因为我们无法让QListWidget
在Qt 4.8中自动迭代3个状态(Qt 5.5中添加了ItemIsUserTristate
标志),我们将手动完成:
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
上相应更改状态。