常用的鼠标事件
实现方式
- 第1步,拖一个TextLab控件
- 由于这些鼠标事件都是虚函数且是受保护的,需要重写。
- 但是此时不能定义到QLabel源码,我们可以继承QLabel,然后重写。
- 第2步,右键项目添加C++类
- 第3步,修改MyLabel对应的文件(我们要重写QLabel,但是没有这个选项继承,只能继承QWidget)
- 第4步,复制MyLabel名称,打开第1步创建的ui文件,选中TextLab控件,右键提升为
- 第5步,在MyLabel头文件中,声明重写鼠标事件
//鼠标进入事件 void enterEvent(QEvent *); //鼠标离开事件 void leaveEvent(QEvent *); //鼠标按下事件 void mousePressEvent(QMouseEvent *ev); //鼠标释放事件 void mouseReleaseEvent(QMouseEvent *ev); //鼠标移动事件 void mouseMoveEvent(QMouseEvent *ev);
- 在MyLabel源文件中
//鼠标进入事件 void MyLabel::enterEvent(QEvent *) { qDebug() << "鼠标进入了"; } //鼠标离开事件 void MyLabel::leaveEvent(QEvent *) { qDebug() << "鼠标离开了"; } //鼠标按下事件 void MyLabel::mousePressEvent(QMouseEvent *ev) { //鼠标左键按下 打印信息 if(ev->button() == Qt::LeftButton) { QString str = QString("鼠标按下了 x = %1 y = %2 " ).arg(ev->x()).arg(ev->y()); qDebug() << str; } } //鼠标释放事件 void MyLabel::mouseReleaseEvent(QMouseEvent *ev) { if(ev->button() == Qt::LeftButton) { QString str = QString("鼠标释放了 x = %1 y = %2 " ).arg(ev->x()).arg(ev->y()); qDebug() << str; } } //鼠标移动事件 void MyLabel::mouseMoveEvent(QMouseEvent *ev) { if(ev->buttons() & Qt::LeftButton) { QString str = QString("鼠标移动了 x = %1 y = %2 " ).arg(ev->x()).arg(ev->y()); qDebug() <<str; } }