【QT】14 鼠标事件

编程入门 行业动态 更新时间:2024-10-11 11:24:10

【QT】14 <a href=https://www.elefans.com/category/jswz/34/1769042.html style=鼠标事件"/>

【QT】14 鼠标事件

14 鼠标事件

  • 14.1 项目准备
  • 14.2 案例1:鼠标进入、离开
    • 14.2.2 鼠标事件的声明与实现
    • 14.2.3 自定义控件的使用
  • 14.3 案例2:鼠标按下、移动、释放
    • 14.3.1 鼠标事件的声明与实现
    • 14.3.2 鼠标事件的实现优化(捕捉鼠标相关信息)

  代码资源:

14.1 项目准备

   (1)创建项目,详细过程步骤:

   (2)自定义控件创建




14.2 案例1:鼠标进入、离开

   思路:假设自定义控件的基类为QLabel类,那么QLabel类中的一些鼠标事件都可以重写/实现,或者QLabel的父类的一些鼠标事件也可以重写实现。

14.2.2 鼠标事件的声明与实现

  (1)鼠标事件的声明:打开自定义控件的头文件,进行鼠标(进入、离开)事件的声明

#ifndef MYLABEL_H
#define MYLABEL_H#include <QWidget>class myLabel : public QWidget
{Q_OBJECT
public:explicit myLabel(QWidget *parent = nullptr);//鼠标进入事件void enterEvent(QEvent *event);//鼠标离开事件void leaveEvent(QEvent *event);signals:
};#endif // MYLABEL_H


  (2)鼠标事件的实现:打开自定义控件的源文件,进行鼠标(进入、离开)事件的函数实现

#include "mylabel.h"
#include <QDebug>myLabel::myLabel(QWidget *parent) : QWidget(parent)
{}
//鼠标进入事件
void myLabel::enterEvent(QEvent *event)
{qDebug()<<"鼠标进入了";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent * )
{qDebug()<<"鼠标离开了了";
}

14.2.3 自定义控件的使用

  (1)将自定义控件的基类改为QLabel类

  (2)在主界面中添加自定义控件:普通 QLabel控件提升为自定义控件




  (3)自定义控件外观设置:添加边框

  (4)效果展示

14.3 案例2:鼠标按下、移动、释放

  上述自定义控件继承自QLabel类,因此可以实现QLabel类中包含的鼠标事件(重写QLabel类中的鼠标事件)

14.3.1 鼠标事件的声明与实现

  (1)鼠标事件的声明:打开自定义控件的头文件,进行鼠标(点击、移动、释放)事件的声明

#ifndef MYLABEL_H
#define MYLABEL_H//#include <QWidget>
#include <QLabel>class myLabel : public QLabel
{Q_OBJECT
public:explicit myLabel(QWidget *parent = nullptr);//鼠标进入事件void enterEvent(QEvent *event);//鼠标离开事件void leaveEvent(QEvent * );//QLabel类中定义的鼠标事件的声明void mouseMoveEvent(QMouseEvent *ev) ;void mousePressEvent(QMouseEvent *ev) ;void  mouseReleaseEvent(QMouseEvent *ev);
signals:
};
#endif // MYLABEL_H


  (2)鼠标事件的实现:打开自定义控件的源文件,进行鼠标(点击、移动、释放)事件的实现

#include "mylabel.h"
#include <QDebug>
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{}
//鼠标进入事件
void myLabel::enterEvent(QEvent *event)
{qDebug()<<"鼠标进入了";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent * )
{qDebug()<<"鼠标离开了了";
}//QLabel类中定义的鼠标事件的声明
void myLabel::mouseMoveEvent(QMouseEvent *ev) 
{//鼠标移动事件qDebug()<<"鼠标移动";}
void myLabel::mousePressEvent(QMouseEvent *ev) 
{//鼠标点击事件qDebug()<<"鼠标按下";
}
void  myLabel::mouseReleaseEvent(QMouseEvent *ev)
{//鼠标释放事件qDebug()<<"鼠标释放";
}


14.3.2 鼠标事件的实现优化(捕捉鼠标相关信息)

  捕捉鼠标相关信息的思路:通过QMouseEvent * ev类实现,该类包含多个成员函数,可以获取鼠标的相关信息

  
  (1)捕捉鼠标位置信息:x()、y()

void myLabel::mouseMoveEvent(QMouseEvent *ev)
{//鼠标移动事件 //捕捉鼠标的信息//(1)鼠标在当前控件的位置QString str=QString("鼠标按下了x=%1  y=%2").arg(ev->x()).arg(ev->y());qDebug()<<str;//(2)鼠标在全局窗口的位置QString str2=QString("鼠标按下了x=%1  y=%2").arg(ev->globalX()).arg(ev->globalY());qDebug()<<str2;
}


  (2)捕捉鼠标的按键(左键、右键、滚轮)信息:button()

void myLabel::mousePressEvent(QMouseEvent *ev)
{//鼠标点击事件//(1)鼠标左键点击if(ev->button()==Qt::LeftButton){qDebug()<<"点击左键";}//(2)鼠标右键点击if(ev->button()==Qt::RightButton){qDebug()<<"点击右键";}
}


  (3)鼠标移动状态的按键信息(实现按住鼠标移动的过程中,也能判断是按的鼠标的哪个键):buttons()

void myLabel::mouseMoveEvent(QMouseEvent *ev)
{//鼠标移动事件 //捕捉鼠标的信息
//    //(1)鼠标在当前控件的位置
//    QString str=QString("鼠标按下了x=%1  y=%2").arg(ev->x()).arg(ev->y());
//     qDebug()<<str;
//    //(2)鼠标在全局窗口的位置
//     QString str2=QString("鼠标按下了x=%1  y=%2").arg(ev->globalX()).arg(ev->globalY());
//      qDebug()<<str2;//(3)鼠标移动与点击状态的绑定if(ev->buttons() & Qt::LeftButton){QString str3=QString("点击左键并移动x=%1  y=%2的位置").arg(ev->x()).arg(ev->y());qDebug()<<str3;}
}


  (4)设置鼠标追踪,不用按键也能获取鼠标信息:

myLabel::myLabel(QWidget *parent) : QLabel(parent)
{//设置鼠标的追踪状态setMouseTracking(true);
}

更多推荐

【QT】14 鼠标事件

本文发布于:2024-03-10 10:44:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727757.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:鼠标   事件   QT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!