Russian Qt Forum
Ноябрь 23, 2024, 16:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: нужен совет по клавиатуре на ARM9 телефоне  (Прочитано 4648 раз)
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_ и отправлялись на нужные виджеты. Как это сделать?
Записан
gogi
Гость
« Ответ #1 : Март 24, 2011, 11:04 »

Пиши свой драйвер клавиатуры. Драйвер для Qt в смысле, а не для линукса.
В хелпе читай про QWSKeyboardHandler.
Пример реализации смотри в $QTDIR/src/gui/embedded/qkbdlinuxinput_qws.cpp/.h
И ещё погугли хорошенько. Я помню такая тема была на ЛОРе несколько лет назад и там были примеры кода.
Записан
lisarden
Гость
« Ответ #2 : Март 24, 2011, 11:53 »

Спасибо за ответ!

а что мне даст драйвер? Он же не будет отслеживать какое окно у меня активное и сейчас надо цифры вводить или буквы (рус, анг, +регистр). Имхо драйвер это что-то Low-level, а не Application-level. Я не прав?
Записан
gogi
Гость
« Ответ #3 : Март 24, 2011, 12:01 »

>а что мне даст драйвер?

Даст возможность обработать новые данные из /dev/input/event0 и передать их дальше в подсистему Qt.
Возможно перед передачей нужно какие-то нажатия отбросить, подсчитать автоповторы вручную или что-нибудь ещё.
Если ничего этого не надо, то пойдёт и стандартный драйвер.
Записан
lisarden
Гость
« Ответ #4 : Март 24, 2011, 12:29 »

согласен, такой драйвер пригодится. Только я сейчас на x86 отлаживаюсь и там стандартная клавиатур работает без всяких драйверов.

Теперь следующй вопрос: каким образом мне захватывать события от клавиатуры (абсолютно все, вне зависимости от активности виджета) и посылать на нужный виджет?
Записан
ритт
Гость
« Ответ #5 : Март 24, 2011, 14:40 »

события клавиатуры с виджетами никак не связаны. обработкой событий, рисованием, синхронизацией и т.д. занимается QWS.
посмотри сорцы любого из драйверов клавиатуры под QWS и сделай подобный для своей железки - всё.
Записан
gogi
Гость
« Ответ #6 : Март 24, 2011, 21:02 »

Только я сейчас на x86 отлаживаюсь и там стандартная клавиатур работает без всяких драйверов.

Стандартный и работает. Собственно ты можешь слушать /dev/input/event* что на своём телефоне, что на компьютере. И код будет практически совпадать. Правда у такого подхода есть недостаток: запускаешь программу через qvfb, она обрабатывает нажатия с клавиатуры. Переключаешься на редактор кода, а программа продолжает обработку нажатий. Пишешь код, а в программе чёрти что твориться  Веселый Тут надо на уровне иксов как-то определять что окно qvfb не активно и всю обработку запрещать.
Записан
lisarden
Гость
« Ответ #7 : Апрель 02, 2011, 13:39 »

собрал апликуху под ARM с включенным qt-kbd-linuxinput. Запускаю и "о чудо!": кнопки работают, как комповая клавиатура без всяких плагинов и даже явного указания QWS_KEYBOARD. Дравер клавы написан в соответствии с подсистемой Linux Input, потому и заработало всё сразу..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 20.