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

2024-10-01 11:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是,我想制作一个带有可检查项的列表视图。我可以用QStandardItemModel作为我的模型。现在我需要做的是添加一些需要自定义数据方法的特性。因此,正如我们所做的那样,我将QStandardItemModel细分为一个类,并指定它为listView的模型。现在我面临的问题是,listView只显示文本而没有check选项。在

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的示例,但没有找到。在


Tags: from模型importselfviewinitdefsys
1条回答
网友
1楼 · 发布于 2024-10-01 11:23:21

您重写了QStandardItemModeldata方法,但没有实现旧的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)

我现在要改变你的例子。在

相关问题 更多 >