Шаг 113.
Библиотека Qt.
Класс 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:

    Если необходимо узнать, были ли в момент наступления события совместно с клавишей нажаты клавиши модификаторов, например <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.




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