因为一开始label并没有事件捕捉的能力,所以要建立一个QLabel类给他提升一下,让他可以被追踪。
创建类时无法直接从QLabel中直接继承,所以选择从QWidget中继承。
首先,建立一个C++class,名为my_label,基类是QWidget
.h文件中 将以下两处改为QLabel。
.cpp文件中将继承于QWidget修改成继承于QLabel
在my_label.h文件中声明一下鼠标进入和鼠标离开事件的函数。
.h文件中函数声明不需要写作用域。
在my_label.cpp中实现鼠标进入和鼠标离开事件的实现。
.cpp文件中函数的实现需要带上作用域
将widge.ui中的label进行提升,提升为my_label即可。
1.鼠标移动
//鼠标移动
void my_label::mouseMoveEvent(QMouseEvent *ev)
{
qDebug()<<QString::fromLocal8Bit("鼠标移动");
}
2.鼠标按下
新的输出数据的方法:利用QString
用.arg输出数据、%1代表第一个参数,%2代表第二个参数(获取鼠标点击的点)
//鼠标按下
void my_label::mousePressEvent(QMouseEvent *ev)
{
QString str = QString(QString::fromLocal8Bit("鼠标按下 X = %1 Y= %2").arg(ev->x()).arg(ev->y()));
qDebug()<<str;
}
3.鼠标释放
//鼠标释放
void my_label::mouseReleaseEvent(QMouseEvent *ev)
{
qDebug()<<QString::fromLocal8Bit("鼠标释放");
}
4.判断键值如果鼠标左键按下才进行操作
如果鼠标左键按下,打印内容。
//鼠标按下
void my_label::mousePressEvent(QMouseEvent *ev)
{
if(ev->button() == Qt::LeftButton)
{
QString str = QString(QString::fromLocal8Bit("鼠标按下 X = %1 Y= %2").arg(ev->x()).arg(ev->y()));
qDebug()<<str;
}
}
5.联合按键判断的时候
&的操作全为真才为真,当鼠标左键按下的时候为真。
//鼠标移动
void my_label::mouseMoveEvent(QMouseEvent *ev)
{
if(ev->buttons() & Qt::LeftButton)
{
qDebug()<<QString::fromLocal8Bit("鼠标移动");
}
}
6.设置鼠标追踪
在构造函数里写,这是个虚函数,要通过构造函数去调用所以要写在构造函数里
setMouseTracking(true);