【问题标题】:Custom QStandardItemModel with custom data method具有自定义数据方法的自定义 QStandardItemModel
【发布时间】:2017-05-07 07:42:36
【问题描述】:

我想做的是,我想制作一个带有可检查项目的 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 的示例,但没有找到。

【问题讨论】:

    标签: python pyqt pyqt4 qstandarditemmodel


    【解决方案1】:

    您正在覆盖 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多