2013-03-13 55 views
2

我创建了一个QListWidget,我想让它的元素仅在应用程序中的特定位置可检查(我需要它为一个特定的应用程序,用户在列表中选择一个主要元素,然后单击它,然后选中次要元素,同时检查它们的框)。 林确定与制造元素可检查的,但我不能找到一个解决方案,以撤消此并删除复选框...我这样做:撤消一个setFlags ItemIsUserCheckable

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) 

但该项目回来与它的复选框:( 我可以简单地摧毁项目,然后再次把它但是这可能是一种沉重的治疗!请问有什么解决办法吗?

谢谢!

回答

6

要删除标记尝试:

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

^^ item是要取消标记的元素。简单来说^操作者的工作原理如对面来|并且因此从该item.flags()返回

更新现有的标志排除QtCore.Qt.ItemIsUserCheckable标志:

虽然上述代码将禁用可检查的特征,完全隐藏复选框尝试

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

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

+0

非常感谢!它部分工作。它使我的项目无法检查,但我仍然显示在我的QListWidget中的复选框(这可能会让用户感到困惑)。你有解决方案来删除它吗? – Jdawleer 2013-04-08 12:03:39

+0

已更新我的回答,以显示一种隐藏复选框的方法(它实际上是一种删除而不是隐藏功能,隐藏功能不存在,无需自行创建并自行完成。) – Viv 2013-04-09 22:11:25

+0

@Viv我知道我迟到了这个问题,但是'.setFlags'是什么? – Hiatus 2014-08-30 22:23:45