在小组件内按下或释放鼠标按钮或移动鼠标光标时,会发生鼠标事件。
常用的函数:
| button() | 返回造成事件的按键 |
| buttons() | 返回造成事件的按键组 |
| flags() | 返回鼠标事件的标志 |
| globalx() | 鼠标光标的全局x位置 |
| globaly() | 鼠标光标的全局y位置 |
| globalPos() | 返回事件发生时鼠标光标的全局位置 |
| x() | 鼠标光标相对于接收事件的小组件的 x 位置 |
| y() | 鼠标光标相对于接收事件的窗口小组件的 y 位置 |
鼠标的键有:
| Qt::LeftButton | 左键 |
| Qt::RightButton | 右键 |
| Qt::MiddleButton | 滑轮 |
| Qt::AllButtons | 全部按键 |
- enterEvent (QEvent *event) 鼠标进入事件
leaveEvent (QEvent *event) 鼠标离开事件
mousePressEvent(QMouseEvent *event) 鼠标按下事件
mouseReleaseEvent(QMouseEvent *event) 鼠标释放事件
mouseMoveEvent (QMouseEvent *event) 鼠标移动事件
mouseDoubleClickEvent(QMouseEvent *event) 鼠标双击事件
在项目中添加以下函数:
- void enterEvent (QEvent *event); 鼠标进入事件
- void leaveEvent (QEvent *event); 鼠标离开事件
- void mousePressEvent(QMouseEvent *event); 鼠标按下事件
- void mouseReleaseEvent(QMouseEvent *event); 鼠标释放事件
- void mouseMoveEvent (QMouseEvent *event); 鼠标移动事件
函数的实现为:
- void mtLabel::enterEvent(QEvent * event)//鼠标进入事件
- {
- qDebug()<<"鼠标进入";
- }
- void mtLabel::leaveEvent(QEvent * event)//鼠标离开事件
- {
- qDebug()<<"鼠标离开";
- }
- void mtLabel::mousePressEvent(QMouseEvent *event)//鼠标点击事件
- {
- if(event->button()==Qt::LeftButton)
- {
- qDebug()<<"鼠标左键点击";
- }
- if(event->button()==Qt::RightButton)
- {
- qDebug()<<"鼠标右键点击";
- }
- if(event->button()==Qt::MiddleButton)
- {
- qDebug()<<"鼠标滚轮点击";
- }
-
- }
- void mtLabel::mouseReleaseEvent(QMouseEvent *event)//鼠标放开事件
- {
- if(event->button()==Qt::LeftButton)
- {
- qDebug()<<"鼠标左键松开";
- }
- if(event->button()==Qt::RightButton)
- {
- qDebug()<<"鼠标右键松开";
- }
- if(event->button()==Qt::MiddleButton)
- {
- qDebug()<<"鼠标滚轮松开";
- }
- }
- void mtLabel::mouseMoveEvent (QMouseEvent *event)//鼠标移动事件
- {
- if(event->buttons() & Qt::LeftButton)
- {
- qDebug()<<"鼠标左键移动";
- }
- if(event->buttons() & Qt::RightButton)
- {
- qDebug()<<"鼠标右键移动";
- }
- qDebug()<<"move:"<<event->x()<<","<<event->y();
- }
- 基于控件的坐标:QPoint p=(event->pos())
- 基于窗口的坐标:QPoint p=(event->globalpos())
- 窗体的坐标: QPoint p= this->frameGeometry().topLeft();
实现控件跟着鼠标移动:
- void mousePressEvent(QMouseEvent *event);//鼠标点击事件
- void mouseMoveEvent (QMouseEvent *event);//鼠标移动事件
- QPoint pos;//保存鼠标坐标
- QPoint qos;//保存框架的坐标
实现:
- void mtLabel::mousePressEvent(QMouseEvent *event)//鼠标点击事件
- {
- if (event->button() == Qt::LeftButton)
- {
-
- //记录鼠标的全屏坐标.
- pos = event->globalPos();
- //记录窗体的全屏坐标.
- qos = this->frameGeometry().topLeft();//坐标是从左上角开始计算
- }
-
- }
- void mtLabel::mouseMoveEvent(QMouseEvent *event)//鼠标移动事件
- {
- if(event->buttons()&Qt::LeftButton)
- {
- QPoint Pos1 = event->globalPos() - pos;//记录坐标的差值
- move(qos+Pos1);//移动坐标
- }
-
- }
- void mtLabel::mouseDoubleClickEvent(QMouseEvent *event)//鼠标双击事件
- {
- if(event->button()==Qt::LeftButton)//双击左键
- {
- if(windowState()!=Qt::WindowFullScreen)//不是全屏的话
- {
- setWindowState(Qt::WindowFullScreen);//设置为全屏
- }
- else
- {
- setWindowState(Qt::WindowNoState);//恢复原样
- }
- }
- }
在控件的构造函数中添加:
setMouseTracking(true); 设置鼠标追踪
可以不用点击执行鼠标移动的内容。
wheelEvent(QWheelEvent *event);//滚轮事件
- void Widget::WheelEvent(QWheelEvent *event)
- {
- if(event->data()>0)//向上滚
- {
- UI->textEdit->zoomIn();进行放大
- }
- else
- {
- UI->textEdit->zoomout();进行缩小
- }
- }