qt鼠标常用事件

和上一个案例相同,也是做了提升,换了相同父类,但是方式有所不同

先在widget.ui中加入label标签,此时其父类为QLabel,然后想实现鼠标在QLabel上的捕获。所以我们需要把QLabel提升为自己的框架,然后自定义框架后,我们就可以自己捕获信息了。然后添加新文件mylabel.h和mylabel.cpp,base class选择继承为QWidget,因为选项没有QlABEL,一会在文件中将函数修改即可。

cpp 复制代码
#ifndef MYLABLE_H
#define MYLABLE_H

#include <QLabel>

class MyLable : public QLabel
{
    Q_OBJECT
public:
    explicit MyLable(QWidget *parent = nullptr);

    //鼠标进入  声明
    void enterEvent(QEvent *);

    //鼠标离开
    void leaveEvent(QEvent *);

    //鼠标按下事件
    void mousePressEvent(QMouseEvent *ev);
    //鼠标离开事件
    void mouseReleaseEvent(QMouseEvent *ev) ;
    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *ev) ;
signals:

};

#endif // MYLABLE_H
cpp 复制代码
#include "mylable.h"
#include "QDebug"
#include "QMouseEvent"
MyLable::MyLable(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪
    this->setMouseTracking(true);//默认为false这里设置为true
}


//两个父类一样才能提升

//此时提升了widget.ui父类为mylable    此时就可以把widget.ui当为mylable进行代码添加使用
//鼠标进入
void MyLable::enterEvent(QEvent *)//加上作用域
{
//    qDebug()<<"鼠标进入了";
}

//鼠标离开
void MyLable::leaveEvent(QEvent *)
{
//    qDebug()<<"鼠标离开了";
}


//鼠标按下事件
void MyLable::mousePressEvent(QMouseEvent *ev)
{
    //如果是鼠标左键按下,才打印下面的信息
    if(ev->button()==Qt::LeftButton)
    {
        QString str=QString("鼠标按下了,x=%1,y=%2").arg(ev->x()).arg(ev->y());//QString函数
        qDebug()<<str;
    }

}
//鼠标离开事件
void MyLable::mouseReleaseEvent(QMouseEvent *ev)
{
    if(ev->button()==Qt::LeftButton){
        QString str=QString("鼠标释放了,x=%1,y=%2").arg(ev->x()).arg(ev->y());
        qDebug()<<str;//
    }

}
//鼠标移动事件
void MyLable::mouseMoveEvent(QMouseEvent *ev)
{
    //移动不是一瞬间的,是一段时间的
//    if(ev->buttons() & Qt::LeftButton)//用了复合按键和未与按键
//    {
        QString str=QString("鼠标移动了,x=%1,y=%2").arg(ev->x()).arg(ev->y());//QString函数
        qDebug()<<str;//要长按
//    }

}//坐标系是基于坐标系的

实现了鼠标进入label框后就会qDebug出在移动,包括点击和离开都会有响应。

代码精讲

复制代码
//鼠标按下事件
void MyLable::mousePressEvent(QMouseEvent *ev)
{    
//如果是鼠标左键按下,才打印下面的信息   
 if(ev->button()==Qt::LeftButton)    
{        QString str=QString("鼠标按下了,x=%1,y=%2").arg(ev->x()).arg(ev->y());//QString函数
复制代码
        qDebug()<<str;    }}

两个红色代码 第一个是按下左键才会实现效果 第二个是会显示在QLable的坐标,它是以左上角为(0,0)基础坐标,经过实现,可以一直出去,坐标可以为负

复制代码
//在构造函数中的设置
MyLable::MyLable(QWidget *parent) : QLabel(parent)
复制代码
{    //设置鼠标追踪  
  this->setMouseTracking(true);//默认为false这里设置为true}

默认为false这里设置为true

效果图如下

相关推荐
serve the people1 小时前
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
开发语言·python·conda
柒七爱吃麻辣烫2 小时前
在Linux中安装JDK并且搭建Java环境
java·linux·开发语言
极小狐2 小时前
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
开发语言·数据库·机器学习·gitlab·ruby
多多*2 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
正在走向自律2 小时前
从0到1:Python机器学习实战全攻略(8/10)
开发语言·python·机器学习
FY_20183 小时前
键盘输出希腊字符方法
开发语言
西西弗Sisyphus3 小时前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python
q567315233 小时前
Go语言多线程爬虫与代理IP反爬
开发语言·爬虫·tcp/ip·golang
Chandler244 小时前
Go语言即时通讯系统 开发日志day1
开发语言·后端·golang
强化学习与机器人控制仿真4 小时前
openpi 入门教程
开发语言·人工智能·python·深度学习·神经网络·机器人·自动驾驶