crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> eventFilter
miksayer
  опции профиля:
сообщение 20.10.2010, 17:59
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 18.1.2009
Пользователь №: 495

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток!
С помощью функции X11 XGrabKey я регистрирую глобальные клавиши, которые я хотел бы принимать:
   XGrabKey(QX11Info::display(), keyCode, mod, QX11Info::appRootWindow(), False, GrabModeAsync, GrabModeAsync);

А потом обрабатываю их в eventFilter'е:
bool MainWindow::eventFilter(QObject * object, QEvent * event)
{
    if (event->type() == QEvent::KeyPress && !isHotkeysEditing && isHotkeysEnabled)
    {
            QKeyEvent * keyEvent = static_cast<QKeyEvent *>(event);
            int qkey = keyEvent->key();
            if (keyEvent->modifiers() & Qt::ShiftModifier)
                qkey |= Qt::SHIFT;
            if (keyEvent->modifiers() & Qt::ControlModifier)
                qkey |= Qt::CTRL;
            if (keyEvent->modifiers() & Qt::AltModifier)
                qkey |= Qt::ALT;
            if (keyEvent->modifiers() & Qt::MetaModifier)
                qkey |= Qt::META;
            QKeySequence ks(qkey);
            hotkeyManager->PerformHotkey(ks);
    }
    return QObject::eventFilter(object, event);
}

Но если окно активно и я нажимаю зарегистрированный хоткей, то окну приходит 2 ивента о нажатии этой клавиши(я так понимаю, 1 так как окно активно и 1 так как я зарегистрировался на пример этих клавиш), что естественно, не то, что нужно. Как не принимать ивент, который пришел из-за "активности" окна?
P.S. QxtGlobalShortcut прошу не советовать, я его уже рассматривал как вариант и он не совсем подходит для моих целей

Сообщение отредактировал miksayer - 20.10.2010, 18:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 20.10.2010, 18:07
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


попробуй вернуть управление до вызова QObject::eventFilter(object, event) , когда клавиша обработана
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
miksayer
  опции профиля:
сообщение 20.10.2010, 18:25
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 18.1.2009
Пользователь №: 495

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 20.10.2010, 18:07) *
попробуй вернуть управление до вызова QObject::eventFilter(object, event) , когда клавиша обработана

спасибо, то что нужно!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 6:26