QShortcut облегчает подключение QShortcutEvent (нажатие клавиши, комбинация или последовательность) к методу слота, например:
QShortcut *shortcut = new QShortcut( QKeySequence(Qt::Key_7), this, 0, 0, Qt::ApplicationShortcut);
(Подсказка: для цифровых клавиш QSignalMapper может использоваться для отображения QShortcut’s activated()
сигнал к слоту с int
параметр).
Однако в этом примере с NumLock (Numpad включен), обе клавиши «7» вызовут ярлык activated()
сигнал.
Есть ли способ обнаружить другие ключи, кроме фильтрации или переопределения виджета keyPressEvent и проверить QKeyEvent :: модификаторы () за Qt :: KeypadModifier?
Копая дальше, я нашел
QTBUG-20191 Qt :: KeypadModifier не работает с setShortcut ссылка на патч, который был объединен в 4.8 в сентябре 2012 и который идет с прецедент с помощью
button2->setShortcut(Qt::Key_5 + Qt::KeypadModifier);
который не работает для моего QShortcut на Qt 4.8.1, то есть ни один из ключей ‘7’ не распознается с использованием (добавлением) флага модификатора.
Так что я думаю, что самым быстрым способом будет установка фильтра для определения модификатора и предоставления возможности всем остальным keyEvents реализацией по умолчанию для использования с QShortcut?
Для этого вы можете использовать keyReleaseEvent(QKeyEvent * event)
Например
void Form::keyReleaseEvent(QKeyEvent *event) {
int key = event->nativeScanCode();
if( key == 79 ) //value for numpad 7
{
//your statement
}}
Ты можешь использовать Qt.KeypadModifier
Например, [Python]:
def keyPressEvent(self, event):
numpad_mod = int(event.modifiers()) & QtCore.Qt.KeypadModifier
if event.key() == QtCore.Qt.Key5 and numpad_mod:
#Numpad 5 clicked