【发布时间】:2020-08-13 00:26:20
【问题描述】:
我正在阅读how to make my QAbstractTableModel editable,它看起来很简单。
但是如何设置一个可编辑的单元格来使用 QCompleter?我以某种方式必须告诉 QTableView 使用 QLineEdit 小部件?我该怎么做?
编辑:嗯,我猜它与QTableView.setItemDelegateForColumn() 有一些关系,但我对delegates 或如何使用它们一无所知。
编辑:我尝试了 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)
【问题讨论】:
-
如果您想创建自己的编辑器小部件,您必须使用
option参数中提供的数据设置位置和几何形状。
标签: python qt qabstracttablemodel qcompleter