我希望 child 只是在按下修饰键时执行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);
}

关于c++ - Qt-知道按键是否只是修饰键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30268343/

10-09 06:00