创建具有整数的项,QStandardItem 不提供 QSpinBox

我在我的程序中使用PySide2和QTableView与QStandardItemModel(对象称为resourcesModel)。当我使用以下代码创建,填充并将项目放入表中时:


item = QStandardItem()

item.setData(123123, Qt.EditRole)

resourcesModel.setItem(1, 1, item)

当我双击包含该值的单元格时,它提供了一个用于编辑数据的框,我可以将字母放入其中。我期望的行为是有一个QSpinBox,这样只有数字可以放在那里。


此代码:


item = QStandardItem()

item.setData(0.25, Qt.EditRole)

resourcesModel.setItem(1, 1, item)

按预期在双击单元格后显示一个 QDoubleSpinBox。PyQt5 中的这两个代码都按预期提供旋转框。


为什么 QStandardItem 不提供 QSpinBox,而输入的值只是一个整数?是否可以在不编写自定义委托的情况下解决此问题?


感谢您的所有回答。


呼唤远方
浏览 154回答 1
1回答

汪汪一只猫

解释:发生的事情是,PySide2将整数从python转换为LongLong(QVariant::LongLong=4),C++默认情况下,默认QItemEditorFactory不会处理,因此使用了(在PyQt中转换为QMetaType::Int=2)。QLineEdit溶液:一种可能的解决方案是创建一个返回相应小部件的自定义 QItemEditorFactory:from PySide2 import QtCore, QtGui, QtWidgetsclass ItemEditorFactory(QtWidgets.QItemEditorFactory):    def createEditor(self, userType, parent):        if userType == 4:            return QtWidgets.QSpinBox(parent, minimum=-2147483648, maximum=2147483647)        return super().createEditor(userType, parent)if __name__ == "__main__":    app = QtWidgets.QApplication([])    factory = ItemEditorFactory()    QtWidgets.QItemEditorFactory.setDefaultFactory(factory)    w = QtWidgets.QTableView()    resourcesModel = QtGui.QStandardItemModel(2, 2)    w.setModel(resourcesModel)    item = QtGui.QStandardItem()    item.setData(123123, QtCore.Qt.EditRole)    resourcesModel.setItem(1, 1, item)    w.resize(640, 480)    w.show()    app.exec_()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python