Как изменить ввод с клавиатуры в QT?

Следующая функция должна быть реализована в нашем существующем приложении QT и C++. Мы должны расширить введенные пользователем аббревиатуры в предопределенные слова. Функционал, который нам нужно реализовать, похож на расширитель текста. Скажем, если пользователь набрал «FL», его нужно немедленно заменить на «Florida».

Мне удалось найти документацию QT для захвата ключевых событий, но я не уверен, как изменить ввод с клавиатуры с помощью предопределенного набора символов.

Было бы здорово, если бы вы, ребята, предоставили мне пример кода и инструкции по этому поводу.

Заранее спасибо!


person Thi    schedule 03.02.2010    source источник


Ответы (2)


Может ли этот пример быть полезным для вас?

Они используют механизм, называемый завершением, который предоставляет разные слова для данной записи... Это очень похоже на словарь в мобильном телефоне...

Пример пользовательского завершения:

http://qt.nokia.com/doc/4.6/tools-customcompleter.html

Надеюсь, это немного поможет!

person Andy M    schedule 03.02.2010
comment
Спасибо, Энди, за ссылку. Я просто хочу полностью заменить предопределенные слова аббревиатурой, введенной пользователем. Мне не нужен выпадающий список и все такое. Скажем, я могу использовать специальный ключ, чтобы сообщить моему приложению, что это аббревиатура, и найти предварительно определенные слова, если они совпадают. Например, если пользователь нажал fl и клавишу пробела, приложению необходимо заменить предопределенные слова на fl. - person Thi; 03.02.2010
comment
Привет еще раз, да, но зная, что вы можете сопоставить fl с Флоридой, вы можете изменить поведение примера, чтобы он реагировал на пробел и сразу добавлял слово... - person Andy M; 04.02.2010
comment
Привет, ты нашел решение своей проблемы? Как ты это сделал ? - person Andy M; 10.02.2010

Зачем вам нужно модифицировать «ввод с клавиатуры»? Позвольте пользователю вводить, и после каждого символа проверяйте совпадения с вашей БД сокращений. Как только вы что-то нажмете, удалите аббревиатуру, введенную пользователем, и замените ее расширением.

Учитывая, что пользователь вводит в какое-то поле редактирования строки или текстовое поле, это очень простые операции, которые даже не должны воздействовать на события, а просто на сигналы, посылаемые этими виджетами при вводе новых символов.

person Eli Bendersky    schedule 03.02.2010
comment
Я хотел сказать, чтобы заменить символы, введенные пользователем, на заранее определенные слова. На самом деле это не текстовое поле, это что-то вроде IDE для редактора кода. - person Thi; 03.02.2010
comment
Значит, вы не хотите показывать, что набрал пользователь? Я думаю, что вы должны - иначе что вы будете отображать, если он не набрал одну из аббревиатур? В любом случае, чтобы скрыть его ввод, вы можете поймать ключевое событие и не передавать его, а затем делать с данными все, что угодно. - person Eli Bendersky; 03.02.2010
comment
Не будет никаких правил по количеству аббревиатур, они могут определять любые предопределенные тексты с тегом аббревиатуры. Это зависит от решения пользователя, либо они могут использовать тег аббревиатуры для расширения, либо они могут просто ввести его. Будет ли это возможно в QT? - person Thi; 03.02.2010
comment
@Thi: если да, воспользуйтесь оригинальным советом, который я дал в ответе. - person Eli Bendersky; 04.02.2010