我正在通过QStyledItemDelegate在QTreeView上安装QCompleter。我的QStandardItemModel如下所示:
Item 1
\_ Item A, Item B, Item C
\_ Item D, Item E, Item F
Item 2
\_ Item G, Item H, Item I
在子类委托中,我有以下代码:
def createEditor(self, parent, option, index):
completer = QtGui.QCompleter(index.model(), parent)
completer.setCompletionRole(QtCore.Qt.DisplayRole)
completer.setCompleterColumn(0) # here's where it gets weird
edit = QtGui.QLineEdit(parent)
edit.setCompleter(completer)
return edit
问题是我似乎无法让我的完成者在层次树中搜索子项。例如,它将仅返回“项目1,项目2”,而不返回“项目A,项目D”。好像我缺少“ setParentItem()”函数之类的东西……
这里有一些“工作”代码,它们可以手动完成我想要的操作,但是我想知道如何直接在模型上执行此操作:
string_list = []
for row in range(index.model().itemFromIndex(index.parent()).rowCount):
string_list.append(index.model().sibling(row, index.column(), index).data(QtCore.Qt.DisplayRole))
completer = QtGui.QCompleter(string_list, parent)
edit = QtGui.QLineEdit(parent)
edit.setCompleter(competer)