Qt Embedded для Linux. Переключение раскладки клавиатуры - PullRequest
4 голосов
/ 19 апреля 2010

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

Я пытался запустить его на Qt / X11. Переключение раскладки и ввод там прекрасно. Но когда я компилирую его с помощью Qt / Embedded и запускаю в фреймбуфере, я не могу изменить макет.

Я искал в документации и не нашел ничего о переключении раскладки.

Я думаю, что это как-то связано с драйвером клавиатуры qt, как указано в документации . Кажется, я должен разработать свой собственный драйвер клавиатуры. Но я использую стандартную клавиатуру и думаю, что должен быть стандартный способ изменить язык ввода?

Что бы вы предложили?

Кстати, я использую версию 4.5. Может быть, 4.6 есть что-то, чтобы решить эту проблему?

Точно такая же проблема здесь:

http://lists.trolltech.com/pipermail/qt-embedded-interest/2008-August/000034.html

http://lists.trolltech.com/qt-interest/2004-02/msg00570.html

Ответы [ 3 ]

7 голосов
/ 21 апреля 2010

Версия 4.6 получила поддержку раскладки клавиатуры . Решение:

  1. создать файл kmap:

    ckbcomp -layout xx> xx.kmap

  2. конвертировать kmap в qmap

    kmap2qmap xx.kmap xx.qmap

  3. загрузить карту ключей либо по

    1. указание переменной среды QWS_KEYBOARD:

      QWS_KEYBOARD = "TTY: раскладка = xx.qmap"

    2. или динамическая загрузка раскладки:

      QWSKeyboardHandler * currentKeyboardHandler =
          QKbdDriverFactory::create("TTY", "keymap=foo.qmap");
      

      Убедитесь, что вы удалили созданный обработчик при создании нового:

      delete currentKeyboardHandler;
      currentKeyboardHandler =
          QKbdDriverFactory::create("TTY", "keymap=bar.qmap");
      

Похоже, что Qt для встраиваемого Linux заменен Project Lighthouse . Не уверен, что если он готов к работе, я не знаю, как он справляется с переключением раскладки клавиатуры.

Обновление

Qt5 не имеет QWS, и все API, связанные с QWS, удалены. Так что вам понадобится какое-то стороннее решение. Или напишите плагин для QPA .

3 голосов
/ 29 марта 2012

Мне нужен способ ввода неамериканских символов

Вы можете изменить qmap, но даже в Qt 4.8.0 нет способа переключаться между русским и американским (например). Вам нужно исправить патч kmap2qmap (добавить поддержку AltGr_Lock), qkbd_qws.cpp (изменить тестовые модули в соответствии с состоянием AltGr_Lock). Похоже, никто не использовал QtEmbedded с клавиатурой. Или все хранит последние патчи в секретном месте.

0 голосов
/ 03 февраля 2014

Не могу комментировать, так что это ответ на

Вам необходимо исправить патч kmap2qmap (добавить поддержку AltGr_Lock), qkbd_qws.cpp (изменить тестовые модули в соответствии с состоянием AltGr_Lock).

Этот простой патч для qkbd_qws.cpp позволяет переключать языки между пользователями с помощью кнопки CapsLock.

523,526c523,524
<             //if (d->m_locks[0] /*CapsLock*/ && (m->flags & QWSKeyboard::IsLetter))
<             //    testmods ^= QWSKeyboard::ModShift;
<             if (d->m_locks[0] /*CapsLock*/)
<                 testmods ^= QWSKeyboard::ModAltGr;
---
>             if (d->m_locks[0] /*CapsLock*/ && (m->flags & QWSKeyboard::IsLetter))
>                 testmods ^= QWSKeyboard::ModShift;
...