为什么布尔值在QAbstractTableModel中创建下拉菜单?

2024-10-02 20:31:32 发布

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

在我的自定义模型设置中,布尔值会自动创建带有真/假选项的组合框/下拉菜单,而字符串值会创建常规的行编辑类型的编辑器

我想知道为什么会这样?我是否可以从代理访问该编辑器以连接其信号(即currentIndexChanged)

Screnshot

enter image description here

下面是要复制的简单代码片段:

from PySide2 import QtCore, QtGui, QtWidgets
import sys

class BoolModel(QtCore.QAbstractTableModel):
    def __init__(self, parent=None):
        super(BoolModel, self).__init__(parent)
        self.bool_value = True

    def flags(self, index):
        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled

    def rowCount(self, parent=QtCore.QModelIndex()):
        return 5

    def columnCount(self, parent=QtCore.QModelIndex()):
        return 1

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
            return self.bool_value

    def setData(self, index, value, role=QtCore.Qt.DisplayRole):
        if role == QtCore.Qt.EditRole:
            self.bool_value = value
            return True
        return False

app = QtWidgets.QApplication([])
model = BoolModel()
table = QtWidgets.QTableView()
table.show()
table.setModel(model)
sys.exit(app.exec_())

Tags: selfindexreturnvaluedeftable编辑器qt
1条回答
网友
1楼 · 发布于 2024-10-02 20:31:32

^{}是一个类,允许为每种类型的数据设置编辑器类型,如the docs所示:

Standard Editing Widgets
The standard factory implementation provides editors for a variety of data types. These are created whenever a delegate needs to provide an editor for data supplied by a model. The following table shows the relationship between types and the standard editors provided. enter image description here

正如您在布尔运算中所看到的,然后使用QComboBox作为编辑器,在QString(或python中的string)中使用QLineEdit

您还可以使用委托访问该编辑器:

class StyledItemDelegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editor = super(StyledItemDelegate, self).createEditor(parent, option, index)
        if isinstance(editor, QtWidgets.QComboBox):
            editor.currentIndexChanged.connect(print)
        return editor
table.setItemDelegate(StyledItemDelegate(table))

相关问题 更多 >