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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSpinBox + QKeyEvent (решено)  (Прочитано 2325 раз)
titan83
Гость
« : Декабрь 06, 2013, 10:11 »

Здравствуйте. У меня несколько странная проблема, но все же...
Есть устройство с собственной клавиатурой (цифровой блок + десяток служебных клавиш).
Чтобы это работало в Qt, сделал преобразование кодов с этой клавиатуры в коды клавиш Qt таким образом:
case A945_KEY_UP:
    QApplication::postEvent(QApplication::focusWidget(), new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier,  "", true, 1));
    QApplication::postEvent(QApplication::focusWidget(), new QKeyEvent(QEvent::KeyRelease, Qt::Key_Up, Qt::NoModifier,  "", true, 1));
В вышеприведенном примере эмулируется нажатие курсорной клавиши "Вверх".
И, в принципе, все работало, как задумано, пока я не положил на форму QSpinBox.
А вот с ним происходит следующая канитель - если нажимаешь курсорные клавиши "Вверх" или "Вниз", чтобы изменить числовое значение, то спинбок себя ведет так, будто клавиша направления оказалась зажата, т.е. значение увеличивается (уменьшается) до предельного значения. Но при этом цифровые клавиши работают нормально, т.е. число можно просто ввести с цифровой клавиатуры, курсорные клавиши "Влево" и "Вправо" также отрабатывают правильно, т.е. можно спокойно двигаться между разрядами, и залипания не происходит.
В других элементах управления (например, QComboBox) такого эффекта не наблюдается.
Также, если запускать приложение в качестве VNC-сервера и работать, соответственно, с обычной клавиатурой, то тоже все правильно работает.
Как победить это странное залипание?
Спасибо.
« Последнее редактирование: Декабрь 06, 2013, 10:18 от titan83 » Записан
titan83
Гость
« Ответ #1 : Декабрь 06, 2013, 10:20 »

Решил проблему - изменил свойство AutoRepeat на false:
QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier,  "", false, 1)
а то почему-то QSpinBox как-то нервно реагировал на такое значение.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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