目录
一、鼠标点击释放移动事件
因为QLabel为基类,因此无法直接在其上面写入,需要新建一个子类。
1.新建子类
2.修改文件
2.1在头文件中的有关修改
2.2在.cpp文件中的有关修改
3.将UI设计的标签提升至子类
4.鼠标事件的设置
4.1子类头文件的代码
public slots:
protected:
void mousePressEvent(QMouseEvent *ev);
void mouseReleaseEvent(QMouseEvent *ev);
void mouseMoveEvent(QMouseEvent *ev);
4.2子类.cpp文件的代码
#include "zl_label.h"
#include "QDebug"
#include "QMouseEvent"
ZL_label::ZL_label(QWidget *parent) : QLabel(parent)
{
this->setMouseTracking(true);//设置鼠标追踪,未设置时默认false,即需要点击鼠标后,才触发追踪效果
}
void ZL_label::mousePressEvent(QMouseEvent *ev)
{
qDebug()<<"标签被鼠标按下";
}
void ZL_label::mouseReleaseEvent(QMouseEvent *ev)
{
qDebug()<<"标签被鼠标按下后,又释放了";
}
void ZL_label::mouseMoveEvent(QMouseEvent *ev)
{
qDebug()<<"标签被鼠标按下后,进行了移动";
}
二、获取鼠标左右键及移动坐标
1.鼠标左右键
1.1鼠标左右键的查找
帮助:QMouseEvent--->button--->Qt::MouseButton(选择GUI)
1.2在被按下的事件中编写
if(ev->button()== Qt::LeftButton){
qDebug()<<"标签被鼠标左键按下";
}
else if(ev->button()==Qt::RightButton){
qDebug()<<"标签被鼠标右键按下";
}
else{
qDebug()<<"标签被其他鼠标按下";
}
2.移动坐标
2.1移动坐标中的x,y与globalx,y的区别
移动坐标中的x,y与globalx,y分别是标签局部内的坐标,一个是全局的坐标
2.2在鼠标移动的事件中编写
void ZL_label::mouseMoveEvent(QMouseEvent *ev)
{
qDebug()<<"标签被鼠标按下后,进行了移动"<<ev->x()<<","<<ev->y();
QString str;
str.sprintf("<center><h1>(%d,%d)</h1></center>",ev->x(),ev->y());//使文本居中显示
this->setText(str);//将str的格式转到标签文本框中
}
三、事件函数的总结
- 步骤1∶新建tabel类继承QLabel (新建工程,ui绘制label,新增c#类继承QWiget,代码修改继承QLabel,ul绘制label提升新创建label类)
- 步骤2:帮助文档的使用
- 步骤3:在.h文件中声明事件函数
- 步骤4:在.cpp文件中实现事件函数
- 步骤5:格式设置(提前了)