2013-03-13 49 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