鼠标进入事件 enterEvent
鼠标离开事件 leaveEvent
鼠标按下 mousePressEvent ( QMouseEvent ev)
鼠标释放 mouseReleaseEvent
鼠标移动 mouseMoveEvent
ev->x() x坐标 ev->y() y坐标 ev->globalX
相对屏幕x ev->globalY
相对屏幕y
ev->button() 可以判断所有按键 Qt::LeftButton Qt::RightButton
ev->buttons()判断组合按键 判断move时候的左右键 结合 & 操作符
格式化字符串 QString( “ %1 %2 ” ).arg( 111 ).arg(222)
设置鼠标追踪 setMouseTracking(true); (直接进入移动事件,不再先进入左键点击;再进入移动)
event
()事件分发器
mylabel.h
#ifndef MYLABEL_H #define MYLABEL_H #include class myLabel : public QLabel { Q_OBJECT public : explicit myLabel(QWidget *parent = 0); //鼠标进入事件 void enterEvent(QEvent *event); //鼠标离开事件 void leaveEvent(QEvent *); //鼠标按下 virtual void mousePressEvent(QMouseEvent *ev); //鼠标释放 virtual void mouseReleaseEvent(QMouseEvent *ev); //鼠标移动 virtual void mouseMoveEvent(QMouseEvent *ev); //通过event事件分发器 拦截 鼠标按下事件 bool event(QEvent *e); signals: public slots: }; #endif // MYLABEL_H
mylabel.cpp
#include "mylabel.h" #include #include myLabel::myLabel(QWidget *parent) : QLabel(parent) { //设置鼠标追踪状态 //setMouseTracking(true); } //鼠标进入事件 void myLabel::enterEvent(QEvent *event) { // qDebug() << "鼠标进入了"; } //鼠标离开事件 void myLabel::leaveEvent(QEvent *) { // qDebug() << "鼠标离开了"; } //鼠标按下 void myLabel::mousePressEvent(QMouseEvent *ev) { //当鼠标左键按下 提示信息 // if( ev->button() == Qt::LeftButton) // { QString str = QString( "鼠标按下了 x = %1 y = %2 globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY()); qDebug() << str; // } } //鼠标释放 void myLabel::mouseReleaseEvent(QMouseEvent *ev) { // if( ev->button() == Qt::LeftButton) // { QString str = QString( "鼠标释放了 x = %1 y = %2 globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY()); qDebug() << str; // } } //鼠标移动 void myLabel::mouseMoveEvent(QMouseEvent *ev) { if ( ev->buttons() & Qt::LeftButton ) { QString str = QString( "鼠标移动了 x = %1 y = %2 globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY()); qDebug() << str; } } bool myLabel::event(QEvent *e) { //如果是鼠标按下 ,在event事件分发中做拦截操作 if (e->type() == QEvent::MouseButtonPress) { QMouseEvent * ev = static_cast (e); QString str = QString( "Event函数中::鼠标按下了 x = %1 y = %2 globalX = %3 globalY = %4 " ).arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY()); qDebug() << str; return true ; //true代表用户自己处理这个事件,不向下分发 } //其他事件 交给父类处理 默认处理 return QLabel::event(e); }