隐藏QListWidgetItem的checkbox

本文主要介绍Python下通过设置Qt::CheckStateRole来隐藏勾选框(checkbox)的方式,
QListWidgetItem设置物品多选的的方法很简单,通过setCheckState()或者setFlags()都可以实现,但是在设置“多选”之后,勾选框就不能通过设置setFlags()来去除Qt::ItemIsUserCheckable的标识。

本文主要介绍Python下通过设置Qt::CheckStateRole来隐藏勾选框(checkbox)的方式。

QListWidgetItem设置物品多选的的方法很简单,通过setCheckState()或者setFlags()都可以实现,但是在设置“多选”之后,勾选框就不能通过设置setFlags()来去除Qt::ItemIsUserCheckable的标识。

根据以下链接的博文说明:
http://badlyhonedbytes.wordpress.com/2013/03/31/hiding-the-checkbox-of-a-qlistwidgetitem/

The trick is to use QListWidgetItem::setData() to set the data in the Qt::CheckStateRole to an empty QVariant(). The same method can be used to set the item’s check state.

只要通过QListWidgetItem::setData()来设置data中的Qt::CheckStateRole为一个空的变量QVariant()即可,在Python中实现方式如下:

from PyQt4 import QtCore, QtGui

#列出QlistWidget的总行数
rows = self.listWidget_item.count()

#读取QlistWidget中的每一行
for row in  xrange(rows):
    #返回所给“行”的物件
    item = self.listWidget_item.item(row)
    #设置Qt::CheckStateRole的值为空
    #的QVariant()变量,10代表Qt::CheckStateRole
    item.setData(10,  QtCore.QVariant())

参考资料
QListWidgetItem
http://qt-project.org/doc/qt-4.8/qlistwidgetitem.html
QVariant
http://qt-project.org/doc/qt-4.8/qvariant.html#QVariant
ItemDataRole
http://qt-project.org/doc/qt-4.8/qt.html#ItemDataRole-enum