qt设置长按键盘键只触发一次事件

你好,我想请问QT中,电脑键盘与button相关联,长按电脑键盘键如何只触发一次button关联事件

QT中,可以使用QKeyEvent类的keyPressEvent()函数来实现,在keyPressEvent()函数中,可以检测到按键的按下事件,并且可以设置一个标志位,当按键按下时,标志位置为true,当按键松开时,标志位置为false,这样就可以实现只触发一次button关联事件。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

用个标志位

bool SpacePressFlag = false; // 处理长按
void MainWindow::keyPressEvent(QKeyEvent *event)
{
    switch (event->key())
    {
    case Qt::Key_Space: {
        if (!SpacePressFlag && !event->isAutoRepeat()) {
            SpacePressFlag = true;
            // Do Something
        }
        break;
    }
    default:
        break;
    }

    MainWindow::keyPressEvent(event);
}

void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
    switch (event->key())
    {
    case Qt::Key_Space: {
        if (SpacePressFlag && !event->isAutoRepeat()) {
            SpacePressFlag = false;
            // Do Something
        }
        break;
    }
    default:
        break;
    }
    MainWindow::keyReleaseEvent(event);
}


直接一句解决

if(event->isAutoRepeat())return;   
//如果是一直按下按钮触发直接返回

希望有帮助