首页 > 解决方案 > QTreeView 中的 QCompleter 未完成预期的列

问题描述

我正在通过 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

问题是我似乎无法让我的完成者在我的分层树中搜索子项。例如,它只会返回“Item 1, Item 2”而不是“Item A, Item 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)

标签: pythonpyqtpyqt4qtreeviewqcompleter

解决方案


推荐阅读