Захват модификаторов клавиш Qt

Я пытаюсь понять, как обрабатывать различные события с помощью Qt, и обнаружил проблему, которую я не могу понять с помощью ключевых модификаторов, например Ctrl сдвиг Alt и т.д. Я сделал приложение Qt GUI по умолчанию в Qt Creator, расширяющее QMainWindow, и обнаружил, что следующий пример не дает понятных результатов.

void MainWindow::keyPressEvent(QKeyEvent *event)
{
qDebug() << "Modifier " << event->modifiers().testFlag(Qt::ControlModifier);
qDebug() << "Key " << event->key();
qDebug() << "Brute force " << (event->key() == Qt::Key_Control);
}

Использование функции modifiers () для события никогда не имеет значения true, в то время как метод грубой силы возвращает правильное значение.

Что я сделал не так?

6

Решение

Попробуйте использовать это, чтобы проверить смену:

if(event->modifiers() & Qt::ShiftModifier){...}

это проверить для контроля:

if(event->modifiers() & Qt::ControlModifier){...}

и так далее. Это хорошо работает для меня.

РЕДАКТИРОВАТЬ:

Чтобы получить модификаторы события колеса, вы должны проверить QWheelEvent объект передан вашему wheelEvent() метод:

void MainWindow::wheelEvent( QWheelEvent *wheelEvent )
{
if( wheelEvent->modifiers() & Qt::ShiftModifier )
{
// do something awesome
}
else if( wheelEvent->modifiers() & Qt::ControlModifier )
{
// do something even awesomer!
}
}
18

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

Согласно документации, QKeyEvent::modifiers не всегда можно доверять Попробуй использовать QApplication::keyboardModifiers() статическая функция вместо.


От Qt 5 Док. — Qt :: KeyboardModifiers QKeyEvent :: modifiers () const:

Предупреждение: Этой функции не всегда можно доверять. Пользователь может запутать это, нажав оба сдвиг ключи одновременно и отпуская один из них, например.

6

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