我想显示而QListView其中每个项目是与某些标签的复选框。该复选框应该是在任何时候都可见。我能想到的一种方法是使用自定义委托和QAbstractListModel。是否有更简单的方法?你能否提供做这个最简单的片断?

在预先感谢

有帮助吗?

解决方案

如果你正在写自己的模型,只包括Qt.ItemIsUserCheckable 旗从flags()方法的返回值,并确保你回来 用于从Qt.CheckStateRole方法data()有效的值。

如果您使用QStandardItemModel类,包括Qt.ItemIsUserCheckable 这些标志传递给每个项目的setFlags()方法,并设置检查 状态以便与其Qt.CheckStateRole方法setData()

在一个交互式的Python会话,键入以下内容:

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()

其他提示

我结束了使用由大卫Boddie 在PyQt的邮件列表中提供的方法。下面是基于他的代码工作片断:

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代替标志

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top