QT中自定义控件的鼠标事件

2023年3月14日 10:06 ry 588

最近在学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控件,点击提升为,如图所示点击提升后,运行代码

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
暂时还没有任何评论哦...

赣ICP备2021001574号-1

赣公网安备 36092402000079号