Qt — знать, является ли нажатая клавиша просто модификатором

Я хотел бы, чтобы ребенок занимался QKeyEvent не быть выполненным, когда нажата только клавиша-модификатор. Следующий код делает работу, но неудобно перечислять их все так. Есть ли встроенный способ сделать это?

void TextEditor::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Shift:
case Qt::Key_Control:
case Qt::Key_Alt:
case Qt::Key_Meta:
case Qt::Key_Mode_switch:
return QPlainTextEdit::keyPressEvent(event);
}

// handle the event...
}

2

Решение

Вы можете использовать это QKeyEvent :: модификаторы () член для этой цели. Если результат

const bool isModifier = ( event->modifiers() != Qt::NoModifier );

true тогда нажатая клавиша была модификатором.

Так что для вас код это означает следующие модификации.

void TextEditor::keyPressEvent( QKeyEvent* event )
{
if ( event->modifiers() != Qt::NoModifier )
{
return QPlainTextEdit::keyPressEvent(event);
}

// Handle the event ...
}

Или, если вы хотите обработать какую-то особую комбинацию клавиш, почему бы просто не использовать этот способ:

void TextEditor::keyPressEvent( QKeyEvent* aKeyEvent )
{
if ( aKeyEvent->matches( QKeySequence::Copy ) )
{
// Your copy stuff ...
return;
}
// else if ( aKeyEvent->matches( ... ) ) // Other key combinations ...

return QPlainTextEdit::keyPressEvent( aKeyEvent);
}
2

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

лучший способ сделать это в 3 строки:

if(event->modifiers()){
event->ignore(); // or don't ignore and handle the event
// switching the modifiers
}

это модификаторы, определенные qt:

Qt::NoModifier
Qt::ShiftModifier
Qt::ControlModifier
Qt::AltModifier
Qt::MetaModifier
Qt::KeypadModifier
Qt::GroupSwitchModifier

Вы можете сделать переключатель для фильтрации.

1

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