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

效果图如下

相关推荐
萧鼎22 分钟前
Python PyTesseract OCR :从基础到项目实战
开发语言·python·ocr
q***235731 分钟前
RabbitMQ介绍以及基本使用
qt·rabbitmq·ruby
二川bro1 小时前
第57节:Three.js企业级应用架构
开发语言·javascript·架构
sali-tec1 小时前
C# 基于halcon的视觉工作流-章62 点云采样
开发语言·图像处理·人工智能·算法·计算机视觉
王宪笙2 小时前
Qt之数据库使用示例
数据库·qt
这人很懒没留下什么2 小时前
SpringBoot2.7.4整合Oauth2
开发语言·lua
ZHOUZAIHUI2 小时前
WSL(Ubuntu24.04) 安装PostgreSQL
开发语言·后端·scala
欧阳x天2 小时前
C++入门(二)
开发语言·c++
CappuccinoRose2 小时前
MATLAB学习文档(二十八)
开发语言·学习·算法·matlab
爱敲代码的loopy3 小时前
MATLAB函数全称解析:旋转翻转找数字
开发语言·matlab