编程语言
首页 > 编程语言> > python – 使用自定义数据方法自定义QStandardItemModel

python – 使用自定义数据方法自定义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_()

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

解决方法:

您将覆盖QStandardItemModel的数据方法,但不会实现旧数据方法处理的每个角色.您可以为所有角色实现if / elif语句,或者我的首选解决方案,将您不希望自己处理的那些语句移交给原始方法.

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

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)

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

标签:python,pyqt,pyqt4,qstandarditemmodel
来源: https://codeday.me/bug/20190831/1773042.html