我希望孩子处理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...
}
答案 0 :(得分:2)
您可以将此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);
}
答案 1 :(得分:1)
更好的方法是在3行中执行此操作:
function myMethod() {
end.innerHTML = aX;
}
这是由qt:
定义的修饰符if(event->modifiers()){
event->ignore(); // or don't ignore and handle the event
// switching the modifiers
}
你可以切换过滤。