2

我创建了一个 QListWidget 并且我想让它的元素仅在应用程序中的特定位置可检查(我需要它用于特定应用程序,其中用户在单击列表时选择主要元素,然后在检查它们的框时选择辅助元素)。我可以使元素可检查,但我找不到解决方案来撤消此操作并删除复选框...我这样做了:

for i in range(self.listWidget.count()):
         item=self.listWidget.item(i)
         item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
         item.setCheckState(QtCore.Qt.Unchecked) 

但后来我挣扎......我试过:

tmp=self.listWidget.takeItem(i)
self.listWidget.addItem(tmp)

但是该项目带着它的复选框回来了:(我可以简单地销毁该项目,然后再把它放回去,但这可能是一种沉重的处理!有什么解决办法吗?

谢谢 !

4

1 回答 1

9

要删除标志,请尝试:

item.setFlags(item.flags() ^ QtCore.Qt.ItemIsUserCheckable)

^^item是您要取消标记的元素。简单来说,运算符与返回的现有标志^相反|,因此将标志排除在外QtCore.Qt.ItemIsUserCheckableitem.flags()

更新:

虽然上面的代码将禁用可检查功能,但要完全隐藏复选框,请尝试

item.setData(Qt::CheckStateRole, QVariant());

请注意,在进行此调用后,这不会保留复选框的状态。

于 2013-03-13T17:23:32.127 回答