我想展示一个QListView,其中每个项目都是一个带有标签的复选框。这些复选框应该始终可见。我可以想到的一种方法是使用自定义代理和QAbstractListModel。是否有更简单的方法?你能提供最简单的代码片段来实现吗?
谢谢您的预先帮助。
谢谢您的预先帮助。
我最终使用了 PyQt 邮件列表中 David Boddie 提供的方法。以下是基于他的代码的可工作片段:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from random import randint
app = QApplication(sys.argv)
model = QStandardItemModel()
for n in range(10):
item = QStandardItem('Item %s' % randint(1, 100))
check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked
item.setCheckState(check)
item.setCheckable(True)
model.appendRow(item)
view = QListView()
view.setModel(model)
view.show()
app.exec_()
注意:将调用 setData
更改为检查角色的 setCheckState
并使用 setCheckable
替代标志。
flags()
方法返回值中包含Qt.ItemIsUserCheckable
标志,并确保从data()
方法返回Qt.CheckStateRole
的有效值。QStandardItemModel
类,则在传递给每个项的setFlags()
方法的参数中包含Qt.ItemIsUserCheckable
标志,并使用其setData()
方法设置Qt.CheckStateRole
的检查状态。from PyQt4.QtGui import *
model = QStandardItemModel()
item = QStandardItem("Item")
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole)
model.appendRow(item)
view = QListView()
view.setModel(model)
view.show()
model.itemChanged
,示例代码在这里:http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/。 - marcin