1

次のエラーが発生する理由を誰かが知っていますか:

TypeError: closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint) only accepts 2 arguments, 2 given!

QStyledItemDelegate を使用しているので、独自の QLineEdit を使用してテーブル (QTableWidget()) をより細かく制御できます。カスタム エディターで制御されているテーブル セルのフォーカスを離れると、エラーが発生します。

以下のコードは、PySide の stardelegate.py の例に基づいています。

class EditDelegate(QStyledItemDelegate):
    def __init__(self, parent=None):
            super(EditDelegate, self).__init__(parent)
    def createEditor(self, parent, option, index):
            result = index.column()
            if result==0:
                    editor = TheEditor(parent)
                    editor.editingFinished.connect(self.commitAndCloseEditor)
                    return editor
            else:
                    return QStyledItemDelegate.createEditor(self, parent, option, index)
    def commitAndCloseEditor(self):
            editor = self.sender()
            self.commitData.emit(editor)
            self.closeEditor.emit(editor)
class TheEditor(QLineEdit):
    editingFinished = Signal()
    def __init__(self, parent=None):
            super(TheEditor, self).__init__(parent)
            self.setAutoFillBackground(True)
            self.setValidator(QIntValidator(0,999999999, self))
    def focusOutEvent(self, event):
            self.editingFinished.emit()
4

1 に答える 1

1

なぜなら、必要なヒントを伝える信号 closeEditor を発行する必要があるからです: EditNextItem、EditPreviousItem または NoHint。

self.closeEditor.emit(editor, QAbstractItemDelegate.NoHint)

HTH

于 2013-07-10T18:44:01.290 に答える