我正在阅读如何使我的 QAbstractTableModel 可编辑,它看起来非常简单。
但是如何设置一个可编辑的单元格来使用 QCompleter?我以某种方式必须告诉 QTableView 使用 QLineEdit 小部件?我怎样才能做到这一点?
编辑:嗯,我猜它与QTableView.setItemDelegateForColumn()有一些关系,但我对代表或如何使用它们一无所知。
编辑:我尝试了 RobbieE 的解决方案,得到了一些可行的方法,但是当我按下 Enter 时,它使弹出组合框的几何形状错误并导致 Python 崩溃。
class CompleterDelegate(QtGui.QStyledItemDelegate):
def __init__(self, parent=None, completerSetupFunction=None):
super(CompleterDelegate, self).__init__(parent)
self._completerSetupFunction = completerSetupFunction
def createEditor(self, parent, option, index):
return QtGui.QLineEdit(parent)
def setEditorData(self, editor, index):
super(CompleterDelegate, self).setEditorData(editor, index)
self._completerSetupFunction(editor, index)
我的 _completerSetupFunction 看起来像这样:
def setupFunc(editor, index):
completer = MyCompleter(editor)
completer.setCompletionColumn(0)
completer.setCompletionRole(QtCore.Qt.DisplayRole)
completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
editor.setCompleter(completer)
completer.setModel(myAbstractItemModel)