QT事件——鼠标事件(包含滚轮)+ 键盘事件

 一鼠标事件

1.用鼠标事件,加头文件#include <QMouseEvent>

2.常用函数表

功能 函数 备注
单击 void mousePressEvent(QMouseEvent *event);  分左键  右键
双击 void mouseDoubleClickEvent(QMouseEvent *event);   
移动 void mouseMoveEvent(QMouseEvent *event);  默认触发需要点击,,此处设置自动触发setMouseTracking(true); 
释放 void mouseReleaseEvent(QMouseEvent *event);    
滚轮 void wheelEvent(QWheelEvent *event);  2个转动方向
void Widget::mousePressEvent(QMouseEvent *event)  //单击
{
    if(event->button() == Qt::LeftButton){ //左键按下,改变指针形状存指针位置与窗口位置的差值。
        ···
    }
    else if(event->button() == Qt::RightButton){  //  如果是鼠标右键按下
       ···
    }
}
void Widget::mouseDoubleClickEvent(QMouseEvent *event)  //双击
{
    if(event->button() == Qt::LeftButton){   // // 如果是鼠标左键按下
      
        ···
    }
}
void Widget::mouseMoveEvent(QMouseEvent *event)  // 移动
{
    // 这里必须使用buttons()
    if(event->buttons() & Qt::LeftButton){  //进行的按位与
       ···
    }
}
void Widget::wheelEvent(QWheelEvent *event)// 滚轮事件
{
    if(event->delta() > 0){    // 当滚轮远离使用者时
        ···
    }else{                     //当滚轮向使用者方向旋转时
        ···
    }
}

二  键盘事件

1.用键盘事件,加头文件#include <QKeyEvent>

2.常用函数表

功能 函数 备注
按下 void Widget::keyPressEvent(QKeyEvent *event)

举例  event->key() == Qt::Key_Up

PS:区分普通按键  /  特殊按键(Ctrl......)

释放 void Widget::keyReleaseEvent(QKeyEvent *event)
void Widget::keyPressEvent(QKeyEvent *event)     // 键盘按下事件
{
    if(event->modifiers() == Qt::ControlModifier){    // 是否按下Ctrl键      特殊按键
        if(event->key() == Qt::Key_M)                 // 是否按下M键    普通按键  类似
            ···
    }
    else QWidget::keyPressEvent(event);   //保存默认事件

    if(event->key() == Qt::Key_Up){       //如果处理两个普通按键,得避免自动重复,释放中也要处理
        if(event->isAutoRepeat()) return; // 按键重复时不做处理
        keyUp = true;                     // 标记向上方向键已经按下
    }else if(event->key() == Qt::Key_Left){
        if(event->isAutoRepeat()) return;
        keyLeft = true;
    }
}
void Widget::keyReleaseEvent(QKeyEvent *event)   // 按键释放事件
{
    ···
   if(event->key() == Qt::Key_Up){            //如果是处理两个普通按键,得避免自动重复
        if(event->isAutoRepeat()) return;
  ···         
    }
    else if(event->key() == Qt::Key_Left){
        if(event->isAutoRepeat()) return;
       ···  
   }
}
发布了101 篇原创文章 · 获赞 3 · 访问量 6336

猜你喜欢

转载自blog.csdn.net/qq_37631516/article/details/104718313