亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建具有整數的項,QStandardItem 不提供 QSpinBox

創建具有整數的項,QStandardItem 不提供 QSpinBox

呼喚遠方 2022-09-06 16:55:15
我在我的程序中使用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,而輸入的值只是一個整數?是否可以在不編寫自定義委托的情況下解決此問題?感謝您的所有回答。
查看完整描述

1 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

解釋:


發生的事情是,PySide2將整數從python轉換為LongLong(QVariant::LongLong=4),C++默認情況下,默認QItemEditorFactory不會處理,因此使用了(在PyQt中轉換為QMetaType::Int=2)。QLineEdit


溶液:


一種可能的解決方案是創建一個返回相應小部件的自定義 QItemEditorFactory:


from PySide2 import QtCore, QtGui, QtWidgets



class 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_()


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號