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

效果图如下

相关推荐
jimy121 分钟前
标准的动态类型定义与“多态”无关,非多态对象同样会出现动态类型不同于静态类型的情形
开发语言·c++
冬、不眠的夜21 分钟前
Nuitka 将 python 程序编译成 exe 指南
开发语言·python
CVer儿23 分钟前
起源1引擎相关知识点2--World Brush+func_detail
开发语言
尘中远23 分钟前
QWT7 的科学 Colormap 色彩评估:QwtColorMapPreset 22 种预设的感知均匀性与场景化选
qt·qwt·科学绘图·科学配色
薛之谦_37 分钟前
JAVA 多线程编程:从基础原理到实战应用
java·开发语言
LMT_Lanmantech38 分钟前
Creo许可降本增效:不增购,也能让现有许可发挥更大价值
java·大数据·开发语言
蜗牛互联网1 小时前
Python Agent 工具调用:审批令牌、参数白名单和累计预算
java·开发语言·人工智能·windows·后端·python
承渊政道2 小时前
【Python编程—从入门到实践】(让程序记得、恢复并解释失败:Python 文件、异常与JSON系统教程)
开发语言·python·pycharm·json·异常处理
一水鉴天2 小时前
声调韵的序:从古汉语音韵到系统科学语言的场效应推演 20261013(千问)
开发语言·人工智能
郭庆汝2 小时前
(六)MCP+A2A之——Playwright与BrowserUse:让AI学会像人类一样使用浏览器
开发语言·python