Qt - 知道按下的键是否只是一个修饰符

时间:2015-05-15 20:38:10

标签: c++ qt qt5 qt5.4 qkeyevent

我希望孩子处理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 个答案:

答案 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
}

你可以切换过滤。