8

我试图了解如何使用 Qt 处理各种事件,并发现了一个我无法使用键修饰符理解的问题,例如Ctrl Shift Alt等。我在 Qt Creator 中创建了一个默认的 Qt GUI 应用程序,扩展了 QMainWindow 并发现以下示例无法理解结果。

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    qDebug() << "Modifier " << event->modifiers().testFlag(Qt::ControlModifier);
    qDebug() << "Key " << event->key();
    qDebug() << "Brute force " << (event->key() == Qt::Key_Control);
}

当暴力方法返回正确的值时,对事件使用修饰符()函数永远不会是真的。

我做错了什么?

4

2 回答 2

27

尝试使用它来检查移位:

if(event->modifiers() & Qt::ShiftModifier){...}

这是为了检查控制:

if(event->modifiers() & Qt::ControlModifier){...}

等等。这对我很有效。

编辑:

要获取车轮事件的修饰符,您需要检查QWheelEvent传递给您的wheelEvent()方法的对象:

void MainWindow::wheelEvent( QWheelEvent *wheelEvent )
{
    if( wheelEvent->modifiers() & Qt::ShiftModifier )
    {
        // do something awesome
    }
    else if( wheelEvent->modifiers() & Qt::ControlModifier )
    {
        // do something even awesomer!
    }
}
于 2013-06-20T02:00:37.567 回答
8

根据文档,QKeyEvent::modifiers 不能总是信任。尝试改用QApplication::keyboardModifiers()静态函数。


来自Qt 5 文档。– Qt::KeyboardModifiers QKeyEvent::modifiers() 常量

警告:不能始终信任此功能。例如,用户可以通过同时按下两个Shift键并释放其中一个来混淆它。

于 2013-06-20T13:29:42.577 回答