Qt鼠标事件使用总结

来源:互联网 发布:神经网络算法能做什么 编辑:程序博客网 时间:2024/06/05 10:29

鼠标事件

    voidmousePressEvent(QMouseEvent*event);       //单击

    voidmouseReleaseEvent(QMouseEvent*event);     //释放

    voidmouseDoubleClickEvent(QMouseEvent*event); //双击

    voidmouseMoveEvent(QMouseEvent*event);        //移动

    voidwheelEvent(QWheelEvent*event);            //滑轮

鼠标事件使用的时候,加头文件

#include<QMouseEvent>

 

  ···

//鼠标按下事件

voidWidget::mousePressEvent(QMouseEvent*event)

{

    //如果是鼠标左键按下  改变指针形状,并且存储当前指针位置与窗口位置的差值。

    if(event->button()==Qt::LeftButton){

        ···

    }

    //如果是鼠标右键按下

    elseif(event->button()==Qt::RightButton){

       ···

    }

}

//鼠标移动事件      默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true);

voidWidget::mouseMoveEvent(QMouseEvent*event)

{

    //这里必须使用buttons()

    if(event->buttons()&Qt::LeftButton){ //进行的按位与

       ···

    }

}

//鼠标释放事件

voidWidget::mouseReleaseEvent(QMouseEvent*event)

{

   ···

}

//鼠标双击事件

voidWidget::mouseDoubleClickEvent(QMouseEvent*event)

{

    //如果是鼠标左键按下

    if(event->button()==Qt::LeftButton){

     

        ···

    }

}

//滚轮事件

voidWidget::wheelEvent(QWheelEvent*event)

{

    //当滚轮远离使用者时

    if(event->delta()>0){

        ···

    }else{//当滚轮向使用者方向旋转时

        ···

    }

}

 

键盘事件

    voidkeyPressEvent(QKeyEvent*event);

    voidkeyReleaseEvent(QKeyEvent*event);

键盘事件使用时,加头文件

#include<QKeyEvent>

 

//键盘按下事件

voidWidget::keyPressEvent(QKeyEvent*event)

{

    //是否按下Ctrl键      特殊按键

    if(event->modifiers()==Qt::ControlModifier){

        //是否按下M键    普通按键  类似

        if(event->key()==Qt::Key_M)

            ···

    }

    elseQWidget::keyPressEvent(event);  //保存默认事件

 

    //如果是处理两个普通按键,得避免自动重复,释放中也要处理

    if(event->key()==Qt::Key_Up){

        //按键重复时不做处理

        if(event->isAutoRepeat())return;

        //标记向上方向键已经按下

        keyUp=true;

    }elseif(event->key()==Qt::Key_Left){

        if(event->isAutoRepeat())return;

        keyLeft=true;

    }

 

}

//按键释放事件

voidWidget::keyReleaseEvent(QKeyEvent*event)

{

    ···

              

    //如果是处理两个普通按键,得避免自动重复

   if(event->key()==Qt::Key_Up){

        if(event->isAutoRepeat())return;

 

        ···      

      

    }

    elseif(event->key()==Qt::Key_Left){

        if(event->isAutoRepeat())return;

       ···

     

   }

 

}