Я пытаюсь понять, как обрабатывать различные события с помощью 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, в то время как метод грубой силы возвращает правильное значение.
Что я сделал не так?
Попробуйте использовать это, чтобы проверить смену:
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!
}
}
Согласно документации, QKeyEvent::modifiers
не всегда можно доверять Попробуй использовать QApplication::keyboardModifiers()
статическая функция вместо.
От Qt 5 Док. — Qt :: KeyboardModifiers QKeyEvent :: modifiers () const:
Предупреждение: Этой функции не всегда можно доверять. Пользователь может запутать это, нажав оба сдвиг ключи одновременно и отпуская один из них, например.