crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QEvent::KeyPress и UNICODE, (сканер штрихкода)
512es
  опции профиля:
сообщение 24.11.2009, 22:41
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


Доброго времени суток!
Есть такая проблема. Пытаюсь перехватить символы юникода, которые вводятся с клавиатуры.

Делаю это вот так:
QApplication::instance()->installEventFilter(this);

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
     if (event->type() == QEvent::KeyPress) {
         QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
      -----------------------------------
     }
  -----------------------------------
}


Проблема в том, что моя программа, видимо вообще не поддерживает ввод юникода с клавиатуры. При этом на виджетах появляются артефакты. И поведение вообще не предсказуемое.

Может кто уже сталкивался с такой проблемой?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 24.11.2009, 23:30
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Чем отличается обычный ввод от ввода символов юникода? В приведённом примере как раз попыка ловить обычный KeyPressEvent? Где связь с юникодом? Уточни задачу....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 24.11.2009, 23:57
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(Elfinit @ 25.11.2009, 0:30) *
Чем отличается обычный ввод от ввода символов юникода? В приведённом примере как раз попыка ловить обычный KeyPressEvent? Где связь с юникодом? Уточни задачу....

Как бы так объяснить..

Когда символы ввожу в любую другую программу, например тот же notepad.exe, отображаются они нормально. А когда в любое текстовое поле своей программы на qt, то отображаются не верно.

Я перехватываю жуткие коды символов. keyEvent->key() выдаёт значения 16777251, 16777235, 16777238 и т.д. А keyEvent->text() вообще порой ничего не выдаёт.

Как их перевести в нормальную читабельную строку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 25.11.2009, 3:02
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Ты используешь сканнер с интерфейсом KBW?
Если читать символы в стандартный lineEdit тогда пролем с отображением нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.11.2009, 9:49
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


512es, не заглядывая внутрь программы, как ты вводишь эти символы?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 25.11.2009, 10:12
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


[/quote]
Цитата(Litkevich Yuriy @ 25.11.2009, 9:49) *
как ты вводишь эти символы?

так и выводит
Цитата(512es @ 24.11.2009, 23:57) *
keyEvent->key() выдаёт значения 16777251,

дело в том что это коды qtшные и на сколько я знаю функция text() жутко глючила до версии 4.5.2.
вопрос в другом зачем перехватывать символ а потом его "вставлять"?
с помощью фильтра событий ты можешь просто пропустить его(символ) дальше и он сам вставится.
Цитата(512es @ 24.11.2009, 23:57) *
Как их перевести в нормальную читабельную строку?

может если покрутить всякие там QTextCodec всё получится без перевода key() в QString() ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.11.2009, 10:19
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Я имею в виду как их не он, а пользователь вводит. Что он нажимает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 25.11.2009, 11:57
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(grio @ 25.11.2009, 4:02) *
Ты используешь сканнер с интерфейсом KBW?

Цитата(Litkevich Yuriy @ 25.11.2009, 11:19) *
Я имею в виду как их не он, а пользователь вводит. Что он нажимает?

Пользователь берёт сканер штрихкода и сканирует штрихкод. Сам сканер подключён по юсб и видится в системе как HID клавиатура. С этой виртуальной клавиатуры вводятся данные.

Сканер может работать в двух режимах: обычная латиница и юникод.
Минус в использовании латиницы в том, что если переключить раскладку клавиатуры на русскую и просканировать штрихкод, то набран он будет русскими буквами.
А минус юникода в том, что как то странно набирает сканер буквы.. В остальных программах набирает правильно, а в любой qt программе, не так как надо.

Есть у меня идея, что сканер набирает юникод сочетанием разных кнопок на клаве.. Например клавиша 16777251, которую я часто получаю при сканировании это QtKey_Alt..

Цитата(grio @ 25.11.2009, 4:02) *
Если читать символы в стандартный lineEdit тогда пролем с отображением нет?

Есть. Строка получается другая. Даже если в любой lineEdit QT Creator'а ввести. Циферные штрихкоды конечно работают нормально, а вот цифро-буквенные не очень..

Цитата(kwisp @ 25.11.2009, 11:12) *
вопрос в другом зачем перехватывать символ а потом его "вставлять"?
с помощью фильтра событий ты можешь просто пропустить его(символ) дальше и он сам вставится.

Просто задумка была такая, чтобы читать штрихкод не зависимо от того, в каком виджете сейчас фокус. Поэтому я его перехватываю, после проверки на определённый префикс читаю сам штрихкод и т.д.



Или же, как вариант, подскажите как переводить символы, введёные в раскладке, отличной от английской, как будто они были введены в английской раскладке. А-ля пунто.
keyEvent->nativeVirtualKey() и keyEvent->nativeScanCode() выдают не правильные символы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 25.11.2009, 12:06
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


я всё равно ничего не понял.
хочешь сказать что чудо клавиотура в любую программу правильно вставляет символы в Qt прогу не правильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 25.11.2009, 12:07
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(kwisp @ 25.11.2009, 13:06) *
я всё равно ничего не понял.
хочешь сказать что чудо клавиотура в любую программу правильно вставляет символы в Qt прогу не правильно?

именно(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 11:11