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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование тачскрина и экранная клавиатура.  (Прочитано 7497 раз)
andi
Гость
« : Январь 18, 2007, 13:00 »

Хочу еще раз поднять этот вопрос в отдельной ветке.
Есть прога на Qt 3.3.6 которая будет крутится на компе у которого из устройств ввода только сенсорный экран. Нужен ввод текста и цифр.
Понятно, что для этого нужна экранная клавиатура.
Какие есть мысли по реализации?
Хотелось бы заиметь отдельный класс, который можно где-нидь в main прикрутить в одном месте. И потом везде иметь к нему доступ как только захочется что-нидь ввести (типа ткнул пальцем в QLineEdit, тут же выехало окно с буквами, ты быстро настукал строку, стукнул Enter и ввод перешел к следующему полю).
Записан
Lion
Гость
« Ответ #1 : Январь 18, 2007, 23:55 »

В данном случае лучше искать решение на уровне операционной системы. Если такого решения нет, то можно сделать клаву в плавающем окне, при нажатии на кнопку посылается событие QKeyEvent объекту у которого фокус. Сложность данной реализации в том, что при клике фокус перейдет плавающей форме и нужно будет определить у кого он был до этого.
Записан
andi
Гость
« Ответ #2 : Январь 19, 2007, 05:31 »

Спасибо за подсказку. В принципе ничто не мешает сделать дублирование ввода в "клавиатурной" форме. И при закрытии вставлять введеные данные в нужное место.
Попробую сделать так.
Записан
mcgeenerman
Гость
« Ответ #3 : Январь 19, 2007, 21:38 »

лично я реализовавывал (на АПИ) как перенаправление события в окно где фокус - события нажатия клавиши. Фокус постоянно возвращается на прежнее место, тоесть при нажатии на кнопку например 1 она приобретая фокус  посылается событие в предыдущий фокус нажатия char 1 и установка окна предыдущего фокуса в текущий фокус окна. Таким образом фокус у активного не терялся. на qt ещё не делал но логику можно сохранить.
Записан
andi
Гость
« Ответ #4 : Январь 22, 2007, 05:43 »

В процессе реализации столкнулся со странной проблемой.
Есть такой код:
Код:

QKeyEvent Key(QEvent::KeyPress, 49,49,Qt::NoButton);
QApplication::sendEvent( focus, &Key );

Где focus - указатель на QLineEdit (куда нужно вставлять нажатия)
Сам код лежит в слоте нажатия на кнопку (точней не на кнопку, а на buttongroup, но это не важно).
Так вот, для проверки перехватываю события от клавиатуры для QLineEdit (проверяю событие, если от клавиатуры, то вывожу все параметры в консоль и возвращаю обработку дальше).
При исполнении все выглядит так: при нажатии на клавиатуру, все перехватывается, отображаются аски-коды кнопок в консоли, и в виджете так же все прекрасно набирается, при нажатии на кнопки клавиатуры, в консоли отображаются те же самые параметры, но в виджете ни какой реакции.
Подозреваю, что сигнал нужно посылать каким-то специфичным образом, но каким, не понятно. В примерах к qt данный аспект не иллюстрируется (максимум посылаются события от имени мыши).
Записан
andi
Гость
« Ответ #5 : Январь 25, 2007, 12:47 »

Хотелось бы вернуться к обсуждению данной темы.
Переформулирую вопрос: как правильно послать сигнал виджету, чтобы он его воспринял как нажатие кнопки клавиатуры?
Записан
nova
Гость
« Ответ #6 : Январь 25, 2007, 18:15 »

У меня предложение.
1. всем виджетам на твоей клавиатуре говориш setFocusPolicy ( Qt::NoFocus ) ( клавианура не будет получать фокус но нажатия обрабатыватся будут)
2. делфеш не QKeyEvent Key(QEvent::KeyPress, 49,49,Qt::NoButton) а QKeyEvent *Key=new QKeyEvent(QEvent::KeyPress, 49,Qt::NoModifier)
3. посылаеш не QApplication::sendEvent(focus, &Key )  а QCoreApplication::postEvent(focus, &Key )
по идее должно сработать Улыбающийся
а и наверно нуно слать QEvent::KeyRelease когда кнопку отпускают
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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