本文主要介绍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