LINUX.ORG.RU

[Qt] Как заставить QCompleter дополнять по одному полю, а отдавать другое?

 


0

0

Вторые сутки долблюсь. В общем, есть у меня две таблицы, скажем

table1:                        table2:
 id : int,                        id: int
 name_id : int       =>           name: string
В table1 name_id является ключом к 'table2'.'name'

Я беру модель table2 и даю ее QCompleter, установив completionColumn в 1, все дополняется, казалось бы, хорошо. Но по возвращению в setModelData у меня есть только editor, в который чертов QCompleter записывает table2.name и следовательно, это все чем я располагаю. Неужели грепать table2 на предмет name и брать оттуда id, который записывать уже в table1? При том, что name может быть далеко не уникальным?

Как сделать так, чтобы при редактировании этого поля в QCompleter выскакивал popup со значениями 'table2'.'name', но в ячейку записывалось 'table2'.'id' из той же модели? Я пробовал сабклассить QCompleter, но не осилил где возвращается значение выбранного индекса из popup. Я даже создал в своем делегате слот commitAndClose(QModelIndex), который присоединил к сигналу activated(QModelIndex) QCompleter'а, но все, что у меня в нем есть, это QModelIndex, который еще и константный. Это просто капец какой-то, хелп!

★★★★★

Пока придумал хранить в делегате id в виде переменной класса, но за такое меня нужно жарить на медленном огне.

lester_dev ★★★★★
() автор топика
Ответ на: комментарий от lester_dev

Разве QMap можно использовать в качестве модели?

Он может быть внутри модели, и оттуда ты будешь брать нужные данные, не?

UVV ★★★★★
()
Ответ на: комментарий от UVV

>Он может быть внутри модели, и оттуда ты будешь брать нужные данные, не?

Внутри модели я и так могу данные брать, проблема в том, что между QCompleter и моим делегатом с моделью единственная связь через виджет редактора, к которому цепляется QCompleter! Сейчас я сделал обходной путь через буераки ака внешняя переменная, но это изврат.

lester_dev ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.