Russian Qt Forum

Qt => Вопросы новичков => Тема начата: titan83 от Декабрь 06, 2013, 10:11



Название: QSpinBox + QKeyEvent (решено)
Отправлено: 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-сервера и работать, соответственно, с обычной клавиатурой, то тоже все правильно работает.
Как победить это странное залипание?
Спасибо.


Название: Re: QSpinBox + QKeyEvent (решено)
Отправлено: titan83 от Декабрь 06, 2013, 10:20
Решил проблему - изменил свойство AutoRepeat на false:
QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier,  "", false, 1)
а то почему-то QSpinBox как-то нервно реагировал на такое значение.