鼠标事件
void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 void mouseDoubleClickEvent(QMouseEvent *event); //双击 void mouseMoveEvent(QMouseEvent *event); //移动 void wheelEvent(QWheelEvent *event); //滑轮
鼠标事件使用的时候,加头文件
#include <QMouseEvent>
···
// 鼠标按下事件 void Widget::mousePressEvent(QMouseEvent *event) { // 如果是鼠标左键按下 改变指针形状,并且存储当前指针位置与窗口位置的差值。 if(event->button() == Qt::LeftButton){ ··· } // 如果是鼠标右键按下 else if(event->button() == Qt::RightButton){ ··· } } // 鼠标移动事件 默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true); void Widget::mouseMoveEvent(QMouseEvent *event) { // 这里必须使用buttons() if(event->buttons() & Qt::LeftButton){ //进行的按位与 ··· } } // 鼠标释放事件 void Widget::mouseReleaseEvent(QMouseEvent *event) { ··· } // 鼠标双击事件 void Widget::mouseDoubleClickEvent(QMouseEvent *event) { // 如果是鼠标左键按下 if(event->button() == Qt::LeftButton){ ··· } } // 滚轮事件 void Widget::wheelEvent(QWheelEvent *event) { // 当滚轮远离使用者时 if(event->delta() > 0){ ··· }else{//当滚轮向使用者方向旋转时 ··· } }
键盘事件
void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event);
键盘事件使用时,加头文件
#include <QKeyEvent>
// 键盘按下事件 void Widget::keyPressEvent(QKeyEvent *event) { // 是否按下Ctrl键 特殊按键 if(event->modifiers() == Qt::ControlModifier){ // 是否按下M键 普通按键 类似 if(event->key() == Qt::Key_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; ··· } }