Нажатие и отпускание клавиши на клавиатуре

При нажатии и отпускании клавиши вызываются следующие методы:

  • keyPressEvent() — вызывается при нажатии клавиши на клавиатуре. Если клавишу удерживать нажатой, то событие генерируется постоянно, пока клавиша не будет отпущена. Прототип метода:
virtual void keyPressEvent(QKeyEvent *event)
  • keyReleaseEvent() — вызывается при отпускании ранее нажатой клавиши. Прототип метода:
virtual void keyReleaseEvent(QKeyEvent *event)

Через параметр доступен экземпляр класса QKeyEvent, который позволяет получить дополнительную информацию о событии. Класс QKeyEvent содержит следующие методы (перечислены только основные методы; полный список смотрите в документации по классу QKeyEvent):

  • key() — возвращает код нажатой клавиши. Прототип метода:
int key() const

Пример определения клавиши:

if (e->key() == Qt::Key_B) {
   qDebug() << "Нажата клавиша <B>";
}
  • text() — возвращает текстовое представление символа в кодировке Unicode. Если клавиша является специальной, то возвращается пустая строка. Прототип метода:
QString text() const
  • modifiers() — позволяет определить, какие клавиши-модификаторы (<Shift>, <Ctrl>, <Alt> и др.) были нажаты вместе с клавишей. Прототип метода:
Qt::KeyboardModifiers modifiers() const

Может содержать значения следующих констант (или комбинацию значений):

  • Qt::NoModifier — модификаторы не нажаты;
  • Qt::ShiftModifier — нажата клавиша <Shift>;
  • Qt::ControlModifier — нажата клавиша <Ctrl>;
  • Qt::AltModifier — нажата клавиша <Alt>;
  • Qt::MetaModifier — нажата клавиша <Meta>;
  • Qt::KeypadModifier;
  • Qt::GroupSwitchModifier.

Пример определения модификатора <Shift>:

if (e->modifiers() & Qt::ShiftModifier) {
   qDebug() << "Нажат модификатор Shift";
}
  • isAutoRepeat() — возвращает значение true, если событие вызвано повторно удержанием клавиши нажатой, и false — в противном случае. Прототип метода:
bool isAutoRepeat() const
  • matches() — возвращает значение true, если нажата специальная комбинация клавиш, соответствующая указанному значению, и false — в противном случае. Прототип метода:
bool matches(QKeySequence::StandardKey key) const

В качестве значения указываются константы из класса QKeySequence, например, QKeySequence::Copy для комбинации клавиш <Ctrl>+<C> (копировать). Полный список констант смотрите в документации по классу QKeySequence. Пример:

if (e->matches(QKeySequence::Copy)) {
   qDebug() << "Нажата комбинация <Ctrl>+<C>";
}

При обработке нажатия клавиш следует учитывать, что:

  • компонент должен иметь возможность принимать фокус ввода. Некоторые компоненты не могут принимать фокус ввода по умолчанию, например, надпись. Чтобы изменить способ получения фокуса следует воспользоваться методом setFocusPolicy(), который мы рассматривали в разд. 4.8.1;
  • чтобы захватить эксклюзивный ввод с клавиатуры следует воспользоваться методом grabKeyboard(), а чтобы освободить ввод — методом releaseKeyboard();
  • можно перехватить нажатие любых клавиш, кроме клавиши <Tab> и комбинации <Shift>+<Tab>. Эти клавиши используются для передачи фокуса следующему и предыдущему компоненту соответственно. Перехватить нажатие этих клавиш можно только в методе event();
  • если событие обработано, то нужно вызвать метод accept() через объект события. Чтобы родительский компонент мог получить событие, вместо метода accept() необходимо вызвать метод ignore().

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов