通过鼠标单击部分检查 QListWidget 项目(三态)
Partially check QListWidget item by mouse click (tristate)
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)
项目在创建时已成功设置为 部分检查 状态,但进一步单击鼠标会在 已检查/[=15 之间切换=]未选中 状态。
QtCore.Qt.ItemIsTristate
已弃用,已被 ItemIsAutoTristate
取代,后者自动处理带有子项的项的部分检查状态。
从 Qt 5.5 开始,您可以使用 QtCore.Qt.ItemIsUserTristate
来获得您想要的行为。
'因为我们不能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
上适当地更改状态。
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)
项目在创建时已成功设置为 部分检查 状态,但进一步单击鼠标会在 已检查/[=15 之间切换=]未选中 状态。
QtCore.Qt.ItemIsTristate
已弃用,已被 ItemIsAutoTristate
取代,后者自动处理带有子项的项的部分检查状态。
从 Qt 5.5 开始,您可以使用 QtCore.Qt.ItemIsUserTristate
来获得您想要的行为。
'因为我们不能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
上适当地更改状态。