撤销 setFlags ItemIsUserCheckable
我创建了一个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());
需要注意的是,这样做之后,复选框的状态不会被保留。