crossplatform.ru

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


  Ответ в eventFilter
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
miksayer Дата 20.10.2010, 18:25
 
Цитата(Алексей1153 @ 20.10.2010, 18:07) *
попробуй вернуть управление до вызова QObject::eventFilter(object, event) , когда клавиша обработана

спасибо, то что нужно!
Алексей1153 Дата 20.10.2010, 18:07
  попробуй вернуть управление до вызова QObject::eventFilter(object, event) , когда клавиша обработана
miksayer Дата 20.10.2010, 17:59
  Доброго времени суток!
С помощью функции 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 прошу не советовать, я его уже рассматривал как вариант и он не совсем подходит для моих целей
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 8:06