鼠标事件"/>
【QT】14 鼠标事件
14 鼠标事件
- 14.1 项目准备
- 14.2 案例1:鼠标进入、离开
- 14.2.2 鼠标事件的声明与实现
- 14.2.3 自定义控件的使用
- 14.3 案例2:鼠标按下、移动、释放
- 14.3.1 鼠标事件的声明与实现
- 14.3.2 鼠标事件的实现优化(捕捉鼠标相关信息)
代码资源:
14.1 项目准备
(1)创建项目,详细过程步骤:
(2)自定义控件创建
14.2 案例1:鼠标进入、离开
思路:假设自定义控件的基类为QLabel类,那么QLabel类中的一些鼠标事件都可以重写/实现,或者QLabel的父类的一些鼠标事件也可以重写实现。
14.2.2 鼠标事件的声明与实现
(1)鼠标事件的声明:打开自定义控件的头文件,进行鼠标(进入、离开)事件的声明
#ifndef MYLABEL_H
#define MYLABEL_H#include <QWidget>class myLabel : public QWidget
{Q_OBJECT
public:explicit myLabel(QWidget *parent = nullptr);//鼠标进入事件void enterEvent(QEvent *event);//鼠标离开事件void leaveEvent(QEvent *event);signals:
};#endif // MYLABEL_H
(2)鼠标事件的实现:打开自定义控件的源文件,进行鼠标(进入、离开)事件的函数实现
#include "mylabel.h"
#include <QDebug>myLabel::myLabel(QWidget *parent) : QWidget(parent)
{}
//鼠标进入事件
void myLabel::enterEvent(QEvent *event)
{qDebug()<<"鼠标进入了";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent * )
{qDebug()<<"鼠标离开了了";
}
14.2.3 自定义控件的使用
(1)将自定义控件的基类改为QLabel类
(2)在主界面中添加自定义控件:普通 QLabel控件提升为自定义控件
(3)自定义控件外观设置:添加边框
(4)效果展示
14.3 案例2:鼠标按下、移动、释放
上述自定义控件继承自QLabel类,因此可以实现QLabel类中包含的鼠标事件(重写QLabel类中的鼠标事件)
14.3.1 鼠标事件的声明与实现
(1)鼠标事件的声明:打开自定义控件的头文件,进行鼠标(点击、移动、释放)事件的声明
#ifndef MYLABEL_H
#define MYLABEL_H//#include <QWidget>
#include <QLabel>class myLabel : public QLabel
{Q_OBJECT
public:explicit myLabel(QWidget *parent = nullptr);//鼠标进入事件void enterEvent(QEvent *event);//鼠标离开事件void leaveEvent(QEvent * );//QLabel类中定义的鼠标事件的声明void mouseMoveEvent(QMouseEvent *ev) ;void mousePressEvent(QMouseEvent *ev) ;void mouseReleaseEvent(QMouseEvent *ev);
signals:
};
#endif // MYLABEL_H
(2)鼠标事件的实现:打开自定义控件的源文件,进行鼠标(点击、移动、释放)事件的实现
#include "mylabel.h"
#include <QDebug>
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{}
//鼠标进入事件
void myLabel::enterEvent(QEvent *event)
{qDebug()<<"鼠标进入了";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent * )
{qDebug()<<"鼠标离开了了";
}//QLabel类中定义的鼠标事件的声明
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{//鼠标移动事件qDebug()<<"鼠标移动";}
void myLabel::mousePressEvent(QMouseEvent *ev)
{//鼠标点击事件qDebug()<<"鼠标按下";
}
void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{//鼠标释放事件qDebug()<<"鼠标释放";
}
14.3.2 鼠标事件的实现优化(捕捉鼠标相关信息)
捕捉鼠标相关信息的思路:通过QMouseEvent * ev类实现,该类包含多个成员函数,可以获取鼠标的相关信息
(1)捕捉鼠标位置信息:x()、y()
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{//鼠标移动事件 //捕捉鼠标的信息//(1)鼠标在当前控件的位置QString str=QString("鼠标按下了x=%1 y=%2").arg(ev->x()).arg(ev->y());qDebug()<<str;//(2)鼠标在全局窗口的位置QString str2=QString("鼠标按下了x=%1 y=%2").arg(ev->globalX()).arg(ev->globalY());qDebug()<<str2;
}
(2)捕捉鼠标的按键(左键、右键、滚轮)信息:button()
void myLabel::mousePressEvent(QMouseEvent *ev)
{//鼠标点击事件//(1)鼠标左键点击if(ev->button()==Qt::LeftButton){qDebug()<<"点击左键";}//(2)鼠标右键点击if(ev->button()==Qt::RightButton){qDebug()<<"点击右键";}
}
(3)鼠标移动状态的按键信息(实现按住鼠标移动的过程中,也能判断是按的鼠标的哪个键):buttons()
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{//鼠标移动事件 //捕捉鼠标的信息
// //(1)鼠标在当前控件的位置
// QString str=QString("鼠标按下了x=%1 y=%2").arg(ev->x()).arg(ev->y());
// qDebug()<<str;
// //(2)鼠标在全局窗口的位置
// QString str2=QString("鼠标按下了x=%1 y=%2").arg(ev->globalX()).arg(ev->globalY());
// qDebug()<<str2;//(3)鼠标移动与点击状态的绑定if(ev->buttons() & Qt::LeftButton){QString str3=QString("点击左键并移动x=%1 y=%2的位置").arg(ev->x()).arg(ev->y());qDebug()<<str3;}
}
(4)设置鼠标追踪,不用按键也能获取鼠标信息:
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{//设置鼠标的追踪状态setMouseTracking(true);
}
更多推荐
【QT】14 鼠标事件
发布评论