На этом шаге рассмотрим класс QKeyEvent.
Класс QKeyEvent содержит данные о событиях клавиатуры. С его помощью можно получить
информацию о клавише, вызвавшей событие, а также ASCII-код отображенного символа
(American Standard Code for Information Interchange — американский стандартный код для
обмена информацией).
Объект события передается в методы QWidget::keyPressEvent() и
QWidget::keyReleaseEvent(), определенные в классе QWidget. Событие может вызываться
нажатием любой клавиши на клавиатуре, включая <Shift>, <Ctrl>, <Alt>, <Esc> и <F1> — <F12>. Исключение составляют клавиша табулятора <Tab> и ее совместное нажатие с клавишей <Shift>, которые используются методом обработки QWidget::event() для передачи
фокуса следующему виджету.
Метод keyPressEvent() вызывается каждый раз при нажатии одной из клавиш на клавиатуре, а метод keyReleaseEvent() — при отпускании.
В методе обработки события с помощью метода QKeyEvent::key() можно определить, какая
из клавиш инициировала его. Этот метод возвращает значение целого типа, которое можно
сравнить с константами клавиш, определенными в классе Qt (см. табл. 1).
Таблица 1. Некоторые значения модификаторов пространства имен Qt
Константа | Значение(HEX) | Константа | Значение(HEX) | Константа | Значение(HEX) |
---|---|---|---|---|---|
Key_Space | 20 | Key_B | 42 | Key_Insert | 1000006 |
Key_NumberSign | 23 | Key_C | 43 | Key_Delete | 1000007 |
Key_Dollar | 24 | Key_D | 44 | Key_Pause | 1000008 |
Key_Percent | 25 | Key_E | 45 | Key_Print | 1000009 |
Key_Ampersand | 26 | Key_F | 46 | Key_Home | 1000010 |
Key_Apostrophe | 27 | Key_G | 47 | Key_End | 1000011 |
Key_ParenLeft | 28 | Key_H | 48 | Key_Left | 1000012 |
Key_ParenRight | 29 | Key_I | 49 | Key_Up | 1000013 |
Key_Asterisk | 2A | Key_J | 4A | Key_Right | 1000014 |
Key_Plus | 2B | Key_K | 4B | Key_Down | 1000015 |
Key_Comma | 2C | Key_L | 4C | Key_PageUp | 1000016 |
Key_Minus | 2D | Key_M | 4D | Key_PageDown | 1000017 |
Key_Period | 2E | Key_N | 4E | Key_Shift | 1000020 |
Key_Slash | 2F | Key_O | 4F | Key_Control | 1000021 |
Key_0 | 30 | Key_P | 50 | Key_Meta | 1000022 |
Key_1 | 31 | Key_Q | 51 | Key_Alt | 1000023 |
Key_2 | 32 | Key_R | 52 | Key_CapsLock | 1000024 |
Key_3 | 33 | Key_S | 53 | Key_NumLock | 1000025 |
Key_4 | 34 | Key_T | 54 | Key_ScrollLock | 1000026 |
Key_5 | 35 | Key_U | 55 | Key_F1 | 1000030 |
Key_6 | 36 | Key_V | 56 | Key_F2 | 1000031 |
Key_7 | 37 | Key_W | 57 | Key_F3 | 1000032 |
Key_8 | 38 | Key_X | 58 | Key_F4 | 1000033 |
Key_9 | 39 | Key_Y | 59 | Key_F5 | 1000034 |
Key_Colon | 3A | Key_Z | 5A | Key_F6 | 1000035 |
Key_Semicolon | 3B | Key_Backslash | 5C | Key_F7 | 1000036 |
Key_Less | 3C | Key_Escape | 1000000 | Key_F8 | 1000037 |
Key_Equal | 3D | Key_Tab | 1000001 | Key_F9 | 1000038 |
Key_Greater | 3E | Key_Backspace | 1000003 | Key_F10 | 1000039 |
Key_Question | 3F | Key_Return | 1000004 | Key_F11 | 100003A |
Key_A | 41 | Key_Enter | 1000005 | Key_F12 | 100003B |
Разберем некоторые из кодов клавиш, приведенных в табл. 1:
- коды от 20 до 3F полностью совпадают со значениями ASCII-кодов;
- от 30 до 39 соответствуют цифровым клавишам, расположенным на клавиатуре в виде
горизонтального ряда прямо над клавишами букв; - от 41 до 5A являются идентификаторами букв. Обратите внимание на то, что они совпадают со значениями ASCII-кодов заглавных букв;
- от 1000030 до 1000052 являются функциональными. В общей сложности их 35, но
в табл. 1 указано только 12, что соответствует обычной клавиатуре; - от 1000006 до 100009, а также 1000025 и 1000026 являются кодами клавиш цифровой клавиатуры;
- от 1000010 до 1000017 являются кодами клавиш управления курсором;
- от 1000020 до 1000023 соответствуют клавишам модификаторов;
- 1000000, 1000001, 1000004 и 1000005 можно объединить в отдельную группу, т. к. они
также генерируют коды символов.
Если необходимо узнать, были ли в момент наступления события совместно с клавишей
нажаты клавиши модификаторов, например <Shift>, <Ctrl> или <Alt>, то это можно проверить с помощью метода modifiers().
С помощью метода text() можно узнать Unicode-текст, полученный вследствие нажатия
клавиши. Этот метод может оказаться полезным в том случае, если в виджете потребуется
обеспечить ввод с клавиатуры. Для клавиш модификаторов этот метод вернет пустую строку. В этом случае нужно воспользоваться методом key(), который будет содержать код клавиши (см. табл. 1).
Метод для обработки событий клавиатуры класса, унаследованного от класса QWidget, может выглядеть следующим образом:
void MyWidget::keyPressEvent(QKeyEvent* pe) { switch (pe->key()) { case Qt::Key_Z: if (pe->modifiers() & Qt::ShiftModifier) { // Выполнить какие-либо действия } else { // Выполнить какие-либо действия } break; default: QWidget::keyPressEvent(pe); // Передать событие дальше } }
В данном примере проверяется, не нажаты ли совместно клавиши <Z> и <Shift>. Для проверки статуса значения, возвращаемого методом modifiers(), используются значения, указанные в табл. 1 шага 111.
На следующем шаге рассмотрим класс QFocusEvent.
Предыдущий шаг
Содержание
Следующий шаг