撤消setFlags ItemIsUserCheckable

时间:2013-03-13 15:43:51

标签: python qt checkbox

我创建了一个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)

但该项目带有复选框:( 我可以简单地破坏物品,然后再把它放回去,但这可能是一种沉重的处理!有没有解决方案?

谢谢!

1 个答案:

答案 0 :(得分:7)

要删除标记,请尝试:

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

^^ item是您想要展开的元素。简单来说,^运算符与|相反,因此从QtCore.Qt.ItemIsUserCheckable返回的现有标志中排除item.flags()标志

<强>更新

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

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

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