#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); } ` `