最近在学QT的鼠标事件,总结下,想自定义一个label控件实现鼠标左键,右键,移入移出的鼠标事件。我们先来自定义Label控件,自定义控件一般有2种方式,一个带ui的,一个直接自定义类,这里我直接自定义控件类来实现,右键项目,点击添加文件,如图所示操作点击choose,然后自己命名类名,注意首字母大写,然后选择Qwiget,如图所示然后点击下一步,完成即可。创建完后文件如图所示
接下来我们点击widget.ui,来拖动Label控件到ui,如图所示
接下来,我们来查看Label的鼠标方法,直接面向文档编程,搜索结果如下所示
接下来,我们自定义的Label控件来重写这个方法,直接复制粘贴,同理。我们再查找鼠标移入移出的方法,如下所示同样的,将该方法直接复制粘贴到mylabel.h文件中,代码如下所示
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QWidget>
#include<QLabel>
class Mylabel : public QLabel
{
Q_OBJECT
public:
explicit Mylabel(QWidget *parent = 0);
void enterEvent(QEvent *event);
void leaveEvent(QEvent *event);
virtual void mousePressEvent(QMouseEvent *ev);
virtual void mouseReleaseEvent(QMouseEvent *ev);
signals:
public slots:
};
#endif // MYLABEL_H
由于是自定义的Label控件,因此要继承QLabel,将原来生成文件中的QWiget改成QLabel,这里声明了函数,接下来我们到mylabel.cpp文件中实现,代码如下所示
#include "mylabel.h"
#include<QDebug>
#include<QMouseEvent>
Mylabel::Mylabel(QWidget *parent) : QLabel(parent)
{
}
void Mylabel::enterEvent(QEvent *event)
{
qDebug()<<"鼠标进入了";
}
void Mylabel::leaveEvent(QEvent *event)
{
qDebug()<<"鼠标离开了";
}
void Mylabel::mousePressEvent(QMouseEvent *ev)
{
qDebug()<<ev->button();
if(ev->button()== Qt::LeftButton)
{
qDebug()<<"鼠标左键按下";
qDebug()<<ev->pos();
}
else
{
qDebug()<<"鼠标右键按下";
qDebug()<<ev->pos();
}
}
void Mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
qDebug()<<"鼠标松开";
}
qt中有判断左键还是右键的方法,如图所示那么就好判断了,自定义控件写好后,得封装到ui中,双击ui文件,右键Label控件,点击提升为,如图所示点击提升后,运行代码
点击此处登录后即可评论