1

QStyledItemDelegate クラスをオーバーライドし、eventFilter 関数を再実装して、タブの押下が検出されたときのエディターの動作をカスタマイズできるようにします。ただし、以下は機能しません。closeEditor シグナルを呼び出す正しい方法は何ですか?

class CustomDelegate(QStyledItemDelegate):
    def __init__(self, parent=None):
        super(CustomDelegate, self).__init__(parent)

    def eventFilter(self, editor, event):
        if (event.type() == QEvent.KeyPress and
            event.key() == Qt.Key_Tab):
            print "Tab captured in editor"
            self.commitData.emit(editor) #This is working
            self.closeEditor.emit(editor) #This does not seem to do anything??
            return True
        return QStyledItemDelegate.eventFilter(self,editor,event)
4

1 に答える 1

4

これは古い質問ですが、同じ問題に遭遇し、この質問を見つけました。

を変更することで解決しました

self.closeEditor.emit(editor)

への行

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

commitDataコールはsetModelData. を呼び出さないと、エディター自体が閉じられるため、 が再度呼び出されますcloseEditorsetModelData

于 2012-02-19T06:29:04.570 に答える