Qt: как перехватить нажатие клавиши Ctrl A в macOS

#c #qt

#c #qt

Вопрос:

Я пытаюсь реализовать ярлыки Emacs по умолчанию, поддерживаемые macOS. Пример кода:

 void InputField::keyPressEventInner(QKeyEvent *e) {
if(e->modifiers().testFlag(Qt::MetaModifier) amp;amp; e->key() == Qt::Key_A) {
   // Does not work
}
  

Я пытался использовать QGuiApplication::keyboardModifiers() :

 if(QGuiApplication::keyboardModifiers().testFlag(Qt::MetaModifier) amp;amp; e->key() == Qt::Key_A) {
// does not work
}
  

QKeyEvent::nativeModifiers() всегда возвращается 0 при нажатии клавиши-модификатора.

Примечание: я использую MetaModifier , потому что, согласно официальной документации:

В macOS значение ControlModifier соответствует командным клавишам на клавиатуре, а значение MetaModifier соответствует клавишам управления.

Как мне перехватить клавишу управления?

Qt 5.12.8
XCode 11.7

Обновление: я могу поймать либо Ctrl или a :

 if(e->modifiers() amp; Qt::MetaModifier))

  

или

 if(e->key() == Qt::Key_A)
  

Комментарии:

1. В качестве проверки работоспособности вы хотя бы пытались использовать Qt::ControlModifier?

2. Я вижу вашу процедуру keyPressEventInner(). Вы явно переопределяете keyPressEvent и keyReleaseEvent ?

3. @JarMan, да, ControlModifier ловит нажатие командной кнопки.

4. @mzimmers, keyPressEvent переопределяется только: « void keyPressEvent(QKeyEvent *e) переопределяет { return outer()->keyPressEventInner(e); } ` `