捕获修改键Qt

use*_*291 6 c++ qt keyboard-events

我试图了解如何使用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);
}
Run Code Online (Sandbox Code Playgroud)

当暴力方法返回正确的值时,对事件使用modifiers()函数永远不会成立.

我做错了什么?

Fre*_*Ben 23

尝试使用它来检查班次:

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

这是为了检查控制:

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

等等.这对我很有用.

编辑:

要获取wheel事件的修饰符,您需要检查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!
    }
}
Run Code Online (Sandbox Code Playgroud)


Pav*_*hov 8

根据文档,QKeyEvent::modifiers 不能总是被信任.尝试使用QApplication::keyboardModifiers()静态功能.


来自Qt 5 Doc.- Qt :: KeyboardModifiers QKeyEvent :: modifiers()const:

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