使用自定义数据方法自定义QStandardItemModel

the*_*232 3 python pyqt pyqt4 qstandarditemmodel

我想要做的是,我想制作一个带有可检查项目的listView.我能够使用QStandardItemModel作为我的模型.现在我需要做的是添加一些需要自定义数据方法的功能.正如我们所做的那样,我将QStandardItemModel分类为一个类,并将其指定为listView的模型.现在我遇到的问题是,listView只显示文本而没有检查选项.

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from random import randint

class rrap(QStandardItemModel):
    def __init__(self ,parent = None):
        QStandardItemModel.__init__(self,parent)
        self.d = QStandardItem(QString("asd"))
        self.d.setCheckable(True)
        self.d.setFlags(Qt.ItemIsUserCheckable| Qt.ItemIsEnabled)
        self.appendRow(self.d)

    def data(self , index , role):
        if role == Qt.ToolTipRole:
            return self.d

        if role == Qt.DisplayRole:
            return self.d.text()

app = QApplication(sys.argv)
view = QListView()
model = rrap()
view.setModel(model)

view.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的一段代码.我在网上搜索,找到显示如何自定义QStandardItemModel的任何示例,但没有得到一个.

thr*_*les 5

您正在重写data方法QStandardItemModel但不实现旧data方法处理的每个角色.您可以if/elif为所有角色实现语句,或者我的首选解决方案,将您不想处理的对象移交给原始方法.

因此,我会将您的data方法更改为:

def data(self , index , role):
    if role == Qt.ToolTipRole:
        return self.d

    if role == Qt.DisplayRole:
        return self.d.text()

    return QStandardItemModel.data(self, index, role)
Run Code Online (Sandbox Code Playgroud)

当我对您的示例进行此更改时,现在会显示复选框.