C ++ Qt QShortcut с цифровой клавишей

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?

5

Решение

Для этого вы можете использовать keyReleaseEvent(QKeyEvent * event)
Например

void Form::keyReleaseEvent(QKeyEvent *event)    {
int key = event->nativeScanCode();

if( key == 79 ) //value for numpad 7
{
//your statement
}}
2

Другие решения

Ты можешь использовать 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
1

По вопросам рекламы [email protected]