如何捕捉Ctrl键释放?

ser*_*hii 2 qt keyrelease

我按下Ctrl按键。我的第一个函数运行良好:

void MainWindow::keyPressEvent(QKeyEvent *event){
    if(event->modifiers()==Qt::CTRL){               //RETURNS TRUE
        ui->widget->groupmaking=true;
    } }
Run Code Online (Sandbox Code Playgroud)

第二,我在检查释放了哪种密钥时遇到了麻烦。(它是Ctrl

void MainWindow::keyReleaseEvent(QKeyEvent *event){
    if(event->modifiers()==Qt::CTRL){               //RETURNS FALSE. WHY?
        ui->widget->groupmaking=false;
        ui->widget->groupexist=true;
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,如何Ctrl正确捕捉释放呢?

vah*_*cho 5

出现这种行为的原因是,当您收到按键释放事件时,此时没有按键修饰符,因为按键Ctrl已经被释放。执行此类检查的正确方法是:

void keyReleaseEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Control) {
        [..]
    }
}
Run Code Online (Sandbox Code Playgroud)