Переключение раскладки клавиатуры в Qt, а не Qt для встроенного Linux

Я ищу способ изменить раскладку клавиатуры из моего приложения Qt. Приложение будет работать на ядре Linux, которое не поддерживает файлы раскладки клавиатуры, поэтому Qt должен сделать все, что касается отображения ввода с клавиатуры.

В случае Qt для Embedded Linux я нашел красивое решение здесь: Qt Встроено для Linux. Переключение раскладки клавиатуры

Но, к сожалению, класс QKbdDriverFactory недоступен для любых других версий Qt, согласно документации здесь: http://qt-project.org/doc/qt-4.8/qkbddriverfactory.html Я все равно пытался включить его (и удивительно, что класс был там), но компилятор выдает ошибки "неопределенная ссылка" всякий раз, когда я вызвать функцию создания.

Должен ли я вручную программировать огромные объекты QMap? Подскажите, пожалуйста, есть ли менее утомительный способ. Я не хочу верить, что файлы qmap нельзя использовать вне Qt для встроенного Linux, потому что зачем конвертер kmap2qmap доступен практически в любом SDK, если большую часть времени он бесполезен?

Алекс

edit: Дополнительная информация: я использую Qt 4.7.4 (32-разрядная версия) и QtCreator 2.4.1.
Я работаю над Ubuntu 12.04, 64-разрядная версия на виртуальной машине.
Целевая система представляет собой аппаратное обеспечение со специализированным минимальное ядро ​​Linux, поэтому пытаться использовать Qt Embedded было бы очень сложно.
Нет ни сервера Xcb, ни плагина буфера кадров (edit2: Но мы используем буфер кадров), и я не мог выяснить, что такое DE или eglfs. означает.


person Alex    schedule 12.08.2014    source источник
comment
В этом вопросе отсутствует важная информация. Вы используете ДЭ? Вы используете Х? Вы используете eglfs? Вы используете плагин фреймбуфера? Какую версию Qt вы используете? Подразумевается, что вы используете Qt 4.8. Почему бы вам тогда не использовать Embedded?   -  person Vanuan    schedule 20.08.2014
comment
Хорошо, я добавил информацию, которую смог узнать. Обратите внимание, что я тот же парень из ветки встроенного Qt, так что давайте постараемся не повторяться. Я просто подумал, что было бы лучше создать новую тему, потому что это новый вопрос.   -  person Alex    schedule 20.08.2014
comment
DE означает среду рабочего стола. Итак, это встроенное устройство, хорошо. Я до сих пор не понимаю, как вам удалось запустить версию Desktop Qt в системе без X11, фреймбуфера или EGL. Графический режим Linux может быть X11, Framebuffer или EGL. Похоже, это не обычная система Linux. Это линукс вообще? Ты сам по себе. Поскольку модуля kbd нет, вам придется реализовать все с нуля (см. проект LFS) или попросить поставщика ядра настроить систему в соответствии с вашими потребностями.   -  person Vanuan    schedule 22.08.2014
comment
Подробнее о поддержке EGL/X/Framebuffer в Qt здесь: qt-project.org/forums/viewthread /24299 Но это для Qt5   -  person Vanuan    schedule 22.08.2014
comment
Может быть, вы используете Qt Embedded Android?   -  person Vanuan    schedule 22.08.2014
comment
Я неправильно понял ваш вопрос о буфере кадров. В моем Qt такого плагина нет, но после расспросов теперь я знаю, что мы используем буфер кадров. Я отредактировал вступительный пост.   -  person Alex    schedule 28.08.2014


Ответы (1)


Похоже, вы должны реализовать свой собственный уровень поддержки клавиатуры.

  1. У вас нет программы dumpkeys, поэтому вы не можете создавать файлы раскладок на устройстве. Используйте десктопную версию.
  2. Коды клавиш, сгенерированные на настольном ПК, могут отличаться от кодов клавиш, сгенерированных вашим устройством, поэтому вам следует адаптировать их.
  3. После адаптации файлов раскладок вы можете написать код для чтения этих файлов.
  4. Имея карту KEY_CODE=>UTF8_CHARACTER, вы можете перехватывать ключевые события и преобразовывать их во входные символы в соответствии с используемой в данный момент раскладкой.
person Vanuan    schedule 22.08.2014
comment
Спасибо, буду иметь ввиду, а пока решили попробовать перейти на Qt Embedded. - person Alex; 28.08.2014