Название: [РЕШЕНО] Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 11:53 Доброго дня! Пытаюсь сделать установку горячих клавиш как в креаторе (Параметры->Среда->Клавиатура->Сочетание клавиш). Хочется, чтобы при вводе любого символа, он отображался в поле ввода, желательно всегда в английском варианте, даже если вводили при русской раскладке.
Код: bool CDlgGlobalSettings::eventFilter(QObject *obj, QEvent *event) Ну и исходя из документации keyEvent->text() не работает с зажатыми Shift, Control, Alt. Как это можно победить? Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 11:56 QkeyEvent::modifiers()
Название: Re: Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 12:10 QkeyEvent::modifiers() ну да вроде как понятно, что можно разделить Код: if (event->type() == QEvent::KeyPress) Я только с Ctrl попробовал и он у меня корректно ничего не отображал, а вот с Shift, Alt все нормально оказывается. но опять же не выводятся функциональные клавиши и т.д. Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 12:20 modifiers() возвращает QFlags, а значит можно так:
Код
Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 12:23 Для расширенной обработки, типа функциональных клавиш и т.п., надо использовать QKeyEvent::key().
Название: Re: Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 12:26 Для расширенной обработки, типа функциональных клавиш и т.п., надо использовать QKeyEvent::key(). а как их потом в текст перевести, делать таблицу перевода самому? Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 12:27 Какой может быть текст у функциональных клавиш ???
Название: Re: Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 12:30 Какой может быть текст у функциональных клавиш ??? ну как какой F1, F2.. другие клавиши Backspase, Home. Если у вас креатор зайдите по пути в первом посте и гляньте чего я хочу добиться) Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 12:33 У меня студия. Эти текстовые метки не более чем придуманные названия клавиш, им не соответствует какой-либо из символов алфавита. Обрабатывайте всё подряд и для функциональных клавиш выводите любые названия, какие хочется.
Название: Re: Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 12:45 У меня студия. Эти текстовые метки не более чем придуманные названия клавиш, им не соответствует какой-либо из символов алфавита. Обрабатывайте всё подряд и для функциональных клавиш выводите любые названия, какие хочется. Понятно, что можно выводить любые названия, это не принципиально меня устроят и те которые на клаве, просто скажем я нажал сочетание клавишь Ctrl+F12, мне нужно визуально отобразить куда-то, что для такого действия будет использована такое сочетание клавишь. а ф-ция key() возвращет ведь код клавиши, значит мне нужно дополнительно каждому коду хранить свое наименование?! В креаторе это работает так: вводишь любую клавишу или сочетание, и он тебе отображет название этих клавишь. Выглядит это так: Название: Re: Обработка нажатия клавиатуры Отправлено: mutineer от Сентябрь 18, 2013, 12:50 Да, тебе надо хранить имя для каждой клавиши и выводить его
Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 12:55 Можно использовать QHash<int, QString> с кодом клавиши и её именем. Если завести в хэш ограниченное количество клавиш, то получится также список доступных комбинаций.
Название: Re: Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 14:06 Можно использовать QHash<int, QString> с кодом клавиши и её именем. Если завести в хэш ограниченное количество клавиш, то получится также список доступных комбинаций. спасибо! А код клавиш, возвращаемых key() под win и linux будет одинаковым? А то мне вроде встречался пост где говорилось, что почему-то они различаются..! Название: Re: Обработка нажатия клавиатуры Отправлено: Hellraiser от Сентябрь 18, 2013, 14:28 Из ассистента:
Цитировать These codes are independent of the underlying window system. Хотя, насчет операционных систем, нет упоминания. А вот клавиши Enter и Return - 2 разные :)Название: Re: Обработка нажатия клавиатуры Отправлено: Vladimir от Сентябрь 18, 2013, 14:31 да и чтобы не быть зависимым от раскладки клавиатуры видимо нужно использовать не key(), a nativeScanCode() или nativeVirtualKey().
|