Расширенный поиск
Евгений Легоцкой8 января 2016 г. 11:53

QtQt WinAPI - Урок 006. Разбор QKeySequence для RegisterHotKey в WinAPI

HotKey, QKeySequence, Qt, RegisterHotKey, WinAPI, горячие клавиши

QKeySequence сильно отличается от последовательности горячих клавиш в WinAPI. QKeySequence фактически является строкой, в которой разделителем горячих клавиш являются знак "+" , а также последовательность ", " в случае, если последовательностей несколько. Тогда, как в WinAPI имеются модификаторы Alt, Ctrl, Shift, которые представлены беззнаковым целочисленным типом, и горячей клавишей, которая представлена кодом клавиатуры.

Разберём вариант, когда имеется одна последовательность в QKeySequence и её необходимо зарегистрировать в качестве глобальной горячей клавиши в WinAPI. Для этого условимся, что QKeySequence в качестве в качестве модификатора будет иметь лишь клавиши Ctrl, Alt, Shift и в качестве горячей клавиши одну из букв английского алфавита.

Далее для разбора QKeySequence напишем две функции:

  • unsigned int winKeyMod(QKeySequence) - которая будет возвращать целочисленную комбинацию модификаторов;
  • char winHotKey(QKetSequence) - которая будет возвращать код горячей клавиши.

Модификаторы Alt, Ctrl и Shift в битовом варианте имеют значения 0b00000001, 0b00000010 и 0b00000100 соответственно, поэтому логическое ИЛИ либо сложение данных чисел даст необходимое число комбинации. Следовательно необходимо в методе winKeyMod, выделить модификаторы из последовательности и в случае их наличия прибавить к числу модификатора, которое вернёт данный метод.

Евгений Легоцкой3 января 2016 г. 11:35

QtQt WinAPI - Урок 005. Глобальный HotKey WinAPI в Qt 5

Qt, HotKey, RegisterHotKey, UnregisterHotKey, WinAPI, горячие клавиши

Для работы с глобальными HotKey в Qt 5 присутствует виртуальный метод nativeEvent . Данный метод заменил методы winEvent , x11Event , macEvent из Qt 4.8.

Фишка в работе HotKey с Qt заключается в том, что если окно находится не в фокусе, то есть оно, например, будет свёрнуто в системный трей, то тогда зарегистрированные QShortcut работать просто не будут. Поэтому необходимо работать с глобальными событиями от операционной системы, то есть перейти к реализации платформозависимой части кода в приложении на Qt.

RegisterHotKey

В данном примере разберём вариант работы с WinAPI . Для этого воспользуемся функцией RegisterHotKey.

BOOL WINAPI RegisterHotKey(
  _In_opt_ HWND hWnd,
  _In_     int  id,
  _In_     UINT fsModifiers,
  _In_     UINT vk
);
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
ИП

C++ - Тест 005. Структуры и Классы

  • Результат:66баллов,
  • Очки рейтинга-1
ВГ

C++ - Тест 003. Условия и циклы

  • Результат:64баллов,
  • Очки рейтинга-1
ВГ

C++ - Тест 005. Структуры и Классы

  • Результат:83баллов,
  • Очки рейтинга4
Последние комментарии
R

Qt WinAPI - Урок 001. Как собрать все DLL, используемые в Qt-проекте?

Не думал, что так оперативно ответите. Спасибо большое, буду ждать! =)

Qt WinAPI - Урок 001. Как собрать все DLL, используемые в Qt-проекте?

Да помнится так были проблемы при сборке MinGW я вроде исправил но на гит не закомитил. Если завтра будет время займусь.
R

Qt WinAPI - Урок 001. Как собрать все DLL, используемые в Qt-проекте?

Добрый день. Вы писали, что под х64 нужно пересобрать проект, при сборке появляются ошибки типа C:\SRC\LibraryCollector-lc_js\LibraryCollector-lc_js\wrappers\dir.cpp:149: ошибка: invalid co…

Компьютерная геометрия с Qt Creator

Вы очень сильно заблуждаетесь. Вот формула для расчёта отражённого вектора. Расчёт углов через косинусы и синусы не требуется от слова совсем . Подробнее обсуждение в этом…

Компьютерная геометрия с Qt Creator

Скалярная математика и тригонометрия - суть одно и тоже. Просто разные языки описания одного предмета. В конечном итоге для расчёта коэффициента отражения нужно знать косинус угла падения. …
Сейчас обсуждают на форуме

Счечик производительности сети

Хорошо. После работы сегодня гляну ваш код внимательно.

QWebEngineView не запускается если к ПК подключено несколько мониторов

Добрый день. Попробуйте запустить приложение на другом ПК с другой графической картой. Может быть баг в OpenGL. Если запустится, то искать способ правильно инициализировать OpenGL конт…

Qt C++ и Python

Если вы хотите использовать Qt и Python. То используйте PyQt5 (неофициальная библиотека привязок из Python к Qt) или PySide2 (официально поддерживаемая бибилотека привязок из Python к Qt). …

Как в Qt в qmenu добавить scrollarea

Вот это наследованный класс меню. Но посути это обычное меню. #pragma once#include <QtWidgets>class TransMenu : public QMenu { Q_OBJECTpublic: TransMenu(QWidget* parent = …

OpenCV Android

нет, Вы берете исходники и под свою систему собираете библиотеки OpenCV(в сети полно инструкций), а потом уже эти библиотеки подключаете к совему Android проекту
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB