以下のコードは、self.emit行で壊れています。 PyQt4ではうまく動作します。このコードを修正してPyQt5で動作させるには?PyQt5でdataChangedを発行する方法
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QObject, pyqtSignal
class ItemDelegate(QtWidgets.QItemDelegate):
def __init__(self, parent):
QtWidgets.QItemDelegate.__init__(self, parent)
def createEditor(self, parent, option, index):
return QtWidgets.QLineEdit()
@QtCore.pyqtSlot()
def setModelData(self, editor, model, index):
self.emit(QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
後で編集:
ワーキング溶液:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QObject, pyqtSignal
class Communicate(QObject):
data_changed = pyqtSignal(QtCore.QModelIndex, QtCore.QModelIndex)
class ItemDelegate(QtWidgets.QItemDelegate):
def __init__(self, parent):
QtWidgets.QItemDelegate.__init__(self, parent)
self.c = Communicate()
@QtCore.pyqtSlot()
def setModelData(self, editor, model, index):
self.c.data_changed.emit(index, index)
'pyqtSlot'デコレータには、' setModelData'への引数を反映させる型引数も与えられます。 PyQt5の古いバージョンは関係なく接続を行いますが、PyQt 5.6はこれを強制します(http://pyqt.sourceforge.net/Docs/PyQt5/incompatibilities.html#pyqt-v5-6)。 – user3419537