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

Python 为什么布尔值在QAbstractTableModel中创建下拉菜单?,python,pyqt,pyqt5,qtableview,qabstracttablemodel,Python,Pyqt,Pyqt5,Qtableview,Qabstracttablemodel,在我的自定义模型设置中,布尔值会自动创建带有真/假选项的组合框/下拉菜单,而字符串值会创建常规的行编辑类型的编辑器 我想知道为什么会这样?我是否可以从代理访问该编辑器以连接其信号(即currentIndexChanged) Screnshot 下面是要复制的简单代码片段: 从PySide2导入QtCore、QtGui、QtWidgets 导入系统 类布尔模型(QtCore.QAbstractTableModel): def uuu init uuu(self,parent=None): sup

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

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

Screnshot

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

从PySide2导入QtCore、QtGui、QtWidgets
导入系统
类布尔模型(QtCore.QAbstractTableModel):
def uuu init uuu(self,parent=None):
super(BoolModel,self)。\uuuu init\uuuuu(父级)
self.bool_值=真
def标志(自、索引):
返回QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled
def行数(self,parent=QtCore.QModelIndex()):
返回5
def columnCount(self,parent=QtCore.QModelIndex()):
返回1
def数据(self,index,role=QtCore.Qt.DisplayRole):
如果角色==QtCore.Qt.DisplayRole或角色==QtCore.Qt.EditRole:
返回self.bool_值
def setData(self、index、value、role=QtCore.Qt.DisplayRole):
如果角色==QtCore.Qt.EditRole:
self.bool_值=值
返回真值
返回错误
app=QtWidgets.QApplication([])
模型=布尔模型()
table=qtwidts.QTableView()
表.show()
表2.setModel(模型)
sys.exit(app.exec_())
是一个类,允许为每种类型的数据设置编辑器类型,如所示:


标准factory实现为各种数据类型提供了编辑器。每当委托需要为模型提供的数据提供编辑器时,就会创建这些编辑器。下表显示了类型与提供的标准编辑器之间的关系。

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

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

class StyledItemDelegate(qtwidts.QStyledItemDelegate):
def createEditor(自身、父项、选项、索引):
editor=super(StyledItemDelegate,self).createEditor(父级,选项,索引)
如果isinstance(编辑器,QtWidgets.QComboBox):
编辑器.currentIndexChanged.connect(打印)
返回编辑器
table.setItemDelegate(StyledItemDelegate(table))

非常清楚,谢谢您的解释!