我希望孩子对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...
}
您可以为此目的使用QKeyEvent::modifiers()成员。如果结果是
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);
}
用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
你可以做一个过滤开关