Russian Qt Forum

Qt => Qt Embedded => Тема начата: lisarden от Март 24, 2011, 10:29



Название: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: lisarden от Март 24, 2011, 10:29
Всем привет!

Я разрабатываю GUI для телефона на ARM9. Аппарат имеет кнопки 0-9, * # плюс 4 софт-кнопки и навигатор <^> "OK" и мне нужно каким-то образом перехватывать все нажатия этих кнопок и создавать всю логику работы системы, а именно:
1) управлять окнами, менять их
2) с помощью стрелок перемещаться между активными виджетами
3) нажатия 0-9 транслировать в буквенный ввод, длительное нажатие преобразовать в цифру..

в общем, всё как на обычном кнопочном сотовом телефоне. Использую я qt-embedded-4.7, поэтому всё приходится делать ручками.

По железу: клавиатура видна в линуксе как "/dev/input/event0" и "/dev/input/event1" (часть нажатий с одного ивента, часть с другого). Я могу объединить 2 драйвера в один, чтобы один event был, но это уже не по теме.

Т.е. мне нужно какое-то одно место, где бы все нажатия и отпускания кнопок захватывались, преобразовывались в нужные Key_ и отправлялись на нужные виджеты. Как это сделать?


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: gogi от Март 24, 2011, 11:04
Пиши свой драйвер клавиатуры. Драйвер для Qt в смысле, а не для линукса.
В хелпе читай про QWSKeyboardHandler.
Пример реализации смотри в $QTDIR/src/gui/embedded/qkbdlinuxinput_qws.cpp/.h
И ещё погугли хорошенько. Я помню такая тема была на ЛОРе несколько лет назад и там были примеры кода.


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: lisarden от Март 24, 2011, 11:53
Спасибо за ответ!

а что мне даст драйвер? Он же не будет отслеживать какое окно у меня активное и сейчас надо цифры вводить или буквы (рус, анг, +регистр). Имхо драйвер это что-то Low-level, а не Application-level. Я не прав?


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: gogi от Март 24, 2011, 12:01
>а что мне даст драйвер?

Даст возможность обработать новые данные из /dev/input/event0 и передать их дальше в подсистему Qt.
Возможно перед передачей нужно какие-то нажатия отбросить, подсчитать автоповторы вручную или что-нибудь ещё.
Если ничего этого не надо, то пойдёт и стандартный драйвер.


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: lisarden от Март 24, 2011, 12:29
согласен, такой драйвер пригодится. Только я сейчас на x86 отлаживаюсь и там стандартная клавиатур работает без всяких драйверов.

Теперь следующй вопрос: каким образом мне захватывать события от клавиатуры (абсолютно все, вне зависимости от активности виджета) и посылать на нужный виджет?


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: ритт от Март 24, 2011, 14:40
события клавиатуры с виджетами никак не связаны. обработкой событий, рисованием, синхронизацией и т.д. занимается QWS.
посмотри сорцы любого из драйверов клавиатуры под QWS и сделай подобный для своей железки - всё.


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: gogi от Март 24, 2011, 21:02
Только я сейчас на x86 отлаживаюсь и там стандартная клавиатур работает без всяких драйверов.

Стандартный и работает. Собственно ты можешь слушать /dev/input/event* что на своём телефоне, что на компьютере. И код будет практически совпадать. Правда у такого подхода есть недостаток: запускаешь программу через qvfb, она обрабатывает нажатия с клавиатуры. Переключаешься на редактор кода, а программа продолжает обработку нажатий. Пишешь код, а в программе чёрти что твориться  :D Тут надо на уровне иксов как-то определять что окно qvfb не активно и всю обработку запрещать.


Название: Re: нужен совет по клавиатуре на ARM9 телефоне
Отправлено: lisarden от Апрель 02, 2011, 13:39
собрал апликуху под ARM с включенным qt-kbd-linuxinput. Запускаю и "о чудо!": кнопки работают, как комповая клавиатура без всяких плагинов и даже явного указания QWS_KEYBOARD. Дравер клавы написан в соответствии с подсистемой Linux Input, потому и заработало всё сразу..