Qt使用QKeyPressEvent区分按键长按和短按

头文件添加

#include  

private slots:
 void keyPressEvent(QKeyEvent *event);
 void keyReleaseEvent(QKeyEvent *event);
private :
bool PressFlag=false;

应用

void minor_interface::keyPressEvent(QKeyEvent *event)
{
    switch(event->key()){
    case Qt::Key_N:
        if(event->isAutoRepeat()&&!PressFlag){  //长按
            PressFlag=true; //长按flag
            //此处添加长按需要实现的代码;
            qDebug()<<"N LONG";
        }
        if(!PressFlag){ //按下
            qDebug()<<"N down";
        }
        break;
    default: break;
    }
    QWidget::keyPressEvent(event);
}

void minor_interface::keyReleaseEvent(QKeyEvent *event)
{
    switch(event->key())
    {
    case Qt::Key_N:
// qDebug()<isAutoRepeat();    //长按的话会一直进出此函数,长按进来的话是true ,不是或最后一次弹起是false
        if(!PressFlag&&!event->isAutoRepeat()){ //
            //此处写短按需要实现的代码;
            qDebug()<<"N short up";
        }else if(PressFlag&&!event->isAutoRepeat()){
            PressFlag=false;
            qDebug()<<"N long up";
        }

        break;
    default: break;
	}
}

你可能感兴趣的:(QT,c++)