Класс 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_Space20Key_B42Key_Insert1000006
Key_NumberSign23Key_C43Key_Delete1000007
Key_Dollar24Key_D44Key_Pause1000008
Key_Percent25Key_E45Key_Print1000009
Key_Ampersand26Key_F46Key_Home1000010
Key_Apostrophe27Key_G47Key_End1000011
Key_ParenLeft28Key_H48Key_Left1000012
Key_ParenRight29Key_I49Key_Up1000013
Key_Asterisk2AKey_J4AKey_Right1000014
Key_Plus2BKey_K4BKey_Down1000015
Key_Comma2CKey_L4CKey_PageUp1000016
Key_Minus2DKey_M4DKey_PageDown1000017
Key_Period2EKey_N4EKey_Shift1000020
Key_Slash2FKey_O4FKey_Control1000021
Key_030Key_P50Key_Meta1000022
Key_131Key_Q51Key_Alt1000023
Key_232Key_R52Key_CapsLock1000024
Key_333Key_S53Key_NumLock1000025
Key_434Key_T54Key_ScrollLock1000026
Key_535Key_U55Key_F11000030
Key_636Key_V56Key_F21000031
Key_737Key_W57Key_F31000032
Key_838Key_X58Key_F41000033
Key_939Key_Y59Key_F51000034
Key_Colon3AKey_Z5AKey_F61000035
Key_Semicolon3BKey_Backslash5CKey_F71000036
Key_Less3CKey_Escape1000000Key_F81000037
Key_Equal3DKey_Tab1000001Key_F91000038
Key_Greater3EKey_Backspace1000003Key_F101000039
Key_Question3FKey_Return1000004Key_F11100003A
Key_A41Key_Enter1000005Key_F12100003B

   
Разберем некоторые из кодов клавиш, приведенных в табл. 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.

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



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

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