Хочу активировать окно с моим виджетом по клавише. У меня завязан ряд действий в моём окне по нажатию клавиши на клавиатуре и нужно, чтобы они отрабатывались даже когда фокус у меня в другом окне или даже рабочем столе.
Делал раньше подобное на Xlib, там это решилось так:
XGrabKey(display,36,0,RootWindowdisplay,screen_num),True,GrabModeAsync,GrabMode Async)
После этого KeyPress event как раз приходил нужным образом.
Пишу на qt3. Пробовал следующие решения:
1. QWidget::grabKeyboard () - в своём классе порождённом от QWidget. Не работает. Не приходят сообщения о нажатии клавиши когда нет фокуса в моём окне.
2. XGrabKey(x11AppDisplay(), 36, 0, qt_xrootwin(), True, GrabModeAsync, GrabModeAsync).
И переопределял virtual bool x11Event( XEvent* ); в своём QWidgetm, надеясь, что мне туда упадёт нужный KeyEvent. Но он, не падает ни туда, ни в keyPressEvent( QKeyEvent* ). Поведение довольно страннное. При запуске программы нажатие Enter (это её я в данном случае хочу перехватить) не срабатывает т.е. все нажатия блокируются (нет никакой реакции на нажатие клавиши), но у меня в программе нужные сообщения не появляются. После завершения моей программмы всё становится на свои места - Enter снова работает.
Как можно это реализовать это на qt3? Поискал по исходникам kde, там тоже делают через XGrabKey, но не могу понять почему у меня это не срабатывает.