LINUX.ORG.RU

Не работает захват Ctrl+Shift+x в Qt 5.11.2

 , , ,


0

2

Debian Linux 9 Stable, Qt 5.11.2, OpenBox+LXDE, клавиатура Genius KB-110 (классика, 101 клавиша).

В Qt есть готовый виджет QKeySequenceEdit, который умеет захватывать нажатые клавиатурные комбинации. Проблема в том, что в нем не работает захват комбинаций вида Ctrl+Shift+A. И в то же время нормально работает захват Ctrl+A, Alt+A, Alt+Shift+A. То есть, не работает именно Ctrl+Shift+Буква.

Если нажать Ctrl+Shift+A, то QKeySequenceEdit сгенерирует вот такую странную вещь:

Ctrl+, Ctrl+A

А комбинация Alt+Shift+A выглядит вполне пристойно:
Alt+Shift+A


Тогда я решил написать свой маленький виджет, который бы тупо ловил keyPressEvent и дальше их обрабатывал:

HotKeyGrabber.h
https://github.com/xintrea/mytetra_dev/blob/6431b73b51fb1807c2d55a4b6f8a5c8ac...

HotKeyGrabber.cpp
https://github.com/xintrea/mytetra_dev/blob/6431b73b51fb1807c2d55a4b6f8a5c8ac...

И сделал в нем дебаговый вывод, какие коды приходят в event->key(). И вот что получилось:

Ctrl+A
13:10:47 [DBG] Key code:  16777249
13:10:48 [DBG] Key code:  65

Shift+A
13:10:55 [DBG] Key code:  16777248
13:10:56 [DBG] Key code:  65

Alt+A
13:11:15 [DBG] Key code:  16777251
13:11:16 [DBG] Key code:  65

Ctrl+Shift+A
13:11:36 [DBG] Key code:  16777249
13:11:36 [DBG] Key code:  0
13:11:37 [DBG] Key code:  65

Alt+Shift+A
13:11:48 [DBG] Key code:  16777251
13:11:49 [DBG] Key code:  16777248
13:11:49 [DBG] Key code:  65


Видно, что на комбинации Ctrl+Shift+A приходит ноль вместо кода 16777248.

Вот. И что теперь делать? Тут, похоже, то ли Qt тупит, то ли DE, то ли менеджер окон. То есть, нет никакой возможности корректно захватить Ctrl+Shift+Буква?

UPD: И что самое странное, клавиатурные комбинации в самой Qt-программе вида QKeySequence(«Ctrl+Shift+A») работают нормально. Не работает именно захват при определении комбинаций (я пишу виджет настройки горячих клавиш).

★★★★★

Последнее исправление: Xintrea (всего исправлений: 2)

Ага, нащупал в чем проблема. Мешает системный переключатель клавиатуры, настроенный на grp:ctrl_shift_toggle. Когда его меняешь на, например, grp:alt_shift_toggle, тогда захват Ctrl+Shift начинает работать.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Все эти Ctrl+Shift и Alt+Shift зло и Windows Way. Одна комбинация мешает срабатыванию горячих клавиш, другая вызывает акселераторы в главных меню. Сегодняшний наиболее удобный стандарт переключения раскладок клавиатуры — Meta (Win, Cmd) + Space. Он работает из коробки в macOS, Windows 10 и GNOME 3 и не мешает ни горячим клавишам, ни акселераторы не вызывает.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Я своим переключателем пользуюсь:

https://webhamster.ru/site/page/index/articles/projectcode/180

А про этот Ctrl+Shift вообще забыл, он стоит как системный, настроенный в момент инсталляции операционки. Только сейчас на него и наткнулся.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Видишь как трудно создавать 🐔 А, ты думал это вам не роллинги релизить и дотнеты получить.

anonymous
()
Ответ на: комментарий от EXL

Сегодняшний наиболее удобный стандарт переключения раскладок клавиатуры — Meta (Win, Cmd) + Space.

CapsLock еще удобнее )

x905 ★★★★★
()

А попробуй сделать хоткей на что либо = F4 и чтобы он работал при нахождении фокуса на combobox )

x905 ★★★★★
()
Ответ на: комментарий от EXL

Сегодняшний наиболее удобный стандарт переключения раскладок клавиатуры — Meta (Win, Cmd) + Space

Capslock-бояре смотрят на этот пост с недоумением.

theNamelessOne ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.