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