QCompleter в QTreeView не завершает ожидаемый столбец

Я устанавливаю QCompleter на QTreeView через QStyledItemDelegate. Мой 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)

0 ответов

Другие вопросы по тегам