隐藏QListWidgetItem的checkbox

本文主要介绍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中实现方式如下:

[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())
[/python]

参考资料
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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据