Название: Использование тачскрина и экранная клавиатура. Отправлено: andi от Январь 18, 2007, 13:00 Хочу еще раз поднять этот вопрос в отдельной ветке.
Есть прога на Qt 3.3.6 которая будет крутится на компе у которого из устройств ввода только сенсорный экран. Нужен ввод текста и цифр. Понятно, что для этого нужна экранная клавиатура. Какие есть мысли по реализации? Хотелось бы заиметь отдельный класс, который можно где-нидь в main прикрутить в одном месте. И потом везде иметь к нему доступ как только захочется что-нидь ввести (типа ткнул пальцем в QLineEdit, тут же выехало окно с буквами, ты быстро настукал строку, стукнул Enter и ввод перешел к следующему полю). Название: Использование тачскрина и экранная клавиатура. Отправлено: Lion от Январь 18, 2007, 23:55 В данном случае лучше искать решение на уровне операционной системы. Если такого решения нет, то можно сделать клаву в плавающем окне, при нажатии на кнопку посылается событие QKeyEvent объекту у которого фокус. Сложность данной реализации в том, что при клике фокус перейдет плавающей форме и нужно будет определить у кого он был до этого.
Название: Использование тачскрина и экранная клавиатура. Отправлено: andi от Январь 19, 2007, 05:31 Спасибо за подсказку. В принципе ничто не мешает сделать дублирование ввода в "клавиатурной" форме. И при закрытии вставлять введеные данные в нужное место.
Попробую сделать так. Название: Использование тачскрина и экранная клавиатура. Отправлено: mcgeenerman от Январь 19, 2007, 21:38 лично я реализовавывал (на АПИ) как перенаправление события в окно где фокус - события нажатия клавиши. Фокус постоянно возвращается на прежнее место, тоесть при нажатии на кнопку например 1 она приобретая фокус посылается событие в предыдущий фокус нажатия char 1 и установка окна предыдущего фокуса в текущий фокус окна. Таким образом фокус у активного не терялся. на qt ещё не делал но логику можно сохранить.
Название: Использование тачскрина и экранная клавиатура. Отправлено: andi от Январь 22, 2007, 05:43 В процессе реализации столкнулся со странной проблемой.
Есть такой код: Код:
Где focus - указатель на QLineEdit (куда нужно вставлять нажатия) Сам код лежит в слоте нажатия на кнопку (точней не на кнопку, а на buttongroup, но это не важно). Так вот, для проверки перехватываю события от клавиатуры для QLineEdit (проверяю событие, если от клавиатуры, то вывожу все параметры в консоль и возвращаю обработку дальше). При исполнении все выглядит так: при нажатии на клавиатуру, все перехватывается, отображаются аски-коды кнопок в консоли, и в виджете так же все прекрасно набирается, при нажатии на кнопки клавиатуры, в консоли отображаются те же самые параметры, но в виджете ни какой реакции. Подозреваю, что сигнал нужно посылать каким-то специфичным образом, но каким, не понятно. В примерах к qt данный аспект не иллюстрируется (максимум посылаются события от имени мыши). Название: Использование тачскрина и экранная клавиатура. Отправлено: andi от Январь 25, 2007, 12:47 Хотелось бы вернуться к обсуждению данной темы.
Переформулирую вопрос: как правильно послать сигнал виджету, чтобы он его воспринял как нажатие кнопки клавиатуры? Название: Использование тачскрина и экранная клавиатура. Отправлено: nova от Январь 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 когда кнопку отпускают |