Передайте QModelIndex вместо QString, когда выделен QCompleter

Существует QCompleter (установленный на QLineEdit), заполненный QStandardItemModel. Эта модель также заполняет QTableView, мне нужно получить QModelIndex и выбрать его в QTableView, но это не удается, он передает текст вместо QModelIndex:

completer.highlighted.connect(print_index) 

проходит только первый индекс:

completer.highlighted.connect(lambda : select_index(completer.currentIndex()))

def select_index(index):

    table_view.setCurrentIndex(index)

Я читаю документы, но не могу понять, что я делаю неправильно. http://doc.qt.io/qt-5/qcompleter.html#highlighted-1


person Sergii Artele    schedule 12.12.2015    source источник


Ответы (2)


Существует две версии highlighted signal: по умолчанию выдается строка, другой испускает QModelIndex Чтобы получить индекс, используйте:

completer.highlighted[QtCore.QModelIndex].connect(onHighlight)

Но будьте осторожны, это индекс в модели завершения, а не модель, которой вы заполнили компоновщик. Вы можете использовать mapToSource, чтобы получить исходный индекс.

def onHighLight(index):
    #completer model
    print(index)
    #model 
    sourceIndex=completer.completionModel().mapToSource(index)
    print(sourceIndex)
person Mel    schedule 14.12.2015

Я хотел бы использовать функцию row() из QmodelIndex. Он напрямую вернет индекс списка вашего текущего выбора.

person pounch_doggie    schedule 24.02.2017