2010-04-19 4 views
4

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

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

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

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

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

BTW, я использую версию 4.5. Возможно, 4.6 есть что-то решить эту проблему?

Exact та же проблема здесь:

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

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

ответ

7

Версия 4.6 получила keymap support. Решение:

  1. генерировать KMAP файл:

    ckbcomp -layout хх> 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 является superseeded Project Lighthouse. Не уверен, хотя, если это готово к производству, я также не знаю, как он справляется с переключением раскладки клавиатуры.

Update

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

+0

Возможно ли также «добавить» новую раскладку к уже загруженному драйверу? – arne

+0

Я не уверен, что вы просите, но если я правильно понял, нет. AFAIK, на драйвер может быть только одна карта. http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/embedded/qkbd_qws.cpp#line81 – Vanuan

+0

Да, я так и думал. Благодаря моему ответу я получил свой материал. – arne

3

I need a way to type non-US characters

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

0

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

You need to patch kmap2qmap (add AltGr_Lock support), qkbd_qws.cpp (change testmods according to state of AltGr_Lock).

Этот простой патч qkbd_qws.cpp позволяет переключатель beteewn языков с помощью кнопки 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;