撤销 setFlags ItemIsUserCheckable 设置

3

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

10

想要删除一个标记,请尝试以下方法:

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

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

更新:

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

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

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

非常感谢!它部分地起作用了。它使我的项目无法被选中,但是在我的QListWidget中仍然显示了复选框(这可能会让用户感到困惑)。你有办法去除那个吗? - Jdawleer
更新了我的答案,展示了一种隐藏复选框的方法(实际上是删除而不是隐藏。没有隐藏功能,除非进行子类化并自己完成)。 - Viv
@Viv 我知道我回答这个问题有点晚,但是.setFlags是什么意思? - www.pieronigro.de
@暂停,我不太确定我理解你的问题。你是在问setFlags()函数是做什么的吗?如果是的话,它只是设置一个枚举Qt::ItemFlag,用于表示控件的特定属性。 - Viv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接