Класс QKeyEvent

   
На этом шаге рассмотрим класс 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.

Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий