Russian Qt Forum

Qt => Общие вопросы => Тема начата: mega_m от Сентябрь 28, 2007, 22:48



Название: События Xorg в Qt4
Отправлено: mega_m от Сентябрь 28, 2007, 22:48
Подскажите как зарегистрировать события клавиатуры в xorg глобально,
чтобы их можно было обрабатывать  функцией

bool Daemon::x11Event(XEvent * event)

Я использовал "grab" клавиатуры.

Display *display = this->x11Info().display();
XGrabKey (display, 44, ControlMask, DefaultRootWindow(display), False, GrabModeAsync, GrabModeAsync);

Указал какие события нужно обрабатывать
XSelectInput(display,  DefaultRootWindow(display), KeyPress | KeyRelease);

Он блокирует клавиши для других приложений, но в обработчик событие не поступает.

Если приложение получает фокус,то первый варнинг работает, а второй нет.
Это потому, что фокус перехватывает lineedit ?

bool Daemon::x11Event(XEvent * event)
{
   qWarning(QString::number( ((XKeyEvent *)event)->keycode).toLocal8Bit());
   if(((XKeyEvent *)event)->type == KeyPress)
      qWarning("ypa");

   return false;
}

Daemon наследуется от QMainWindow

В Windows всё получилось.

В Gtk обработчик кушает все события и там нужно ставить фильтры.