#include "mylabel.h"
#include <QDebug>
#include <QPointF>
#include <QPoint> MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
this->setMouseTracking(true); //设置鼠标移动跟踪的模式
//true 只要鼠标移动就触发mouseMoveEvent事件
//false 只有按下鼠标并移动才触发mouseMoveEvent事件
qDebug()<<this->hasMouseTracking(); //返回鼠标的跟踪状态 this->setCursor(Qt::CrossCursor); //设置鼠标在本控件中的形状
//系统鼠标形状看下边
this->unsetCursor(); //恢复默认鼠标形状 } void MyLabel::enterEvent(QEvent *event){
qDebug()<<"鼠标进来了";
}
void MyLabel::leaveEvent(QEvent *event){
qDebug()<<"鼠标离开了";
}
void MyLabel::mousePressEvent(QMouseEvent *event){
qDebug()<<"按下了鼠标";
if (event->button()==Qt::LeftButton) { //如果按下鼠标左键
qDebug()<<"你按下了鼠标左键";
} if (event->button()==Qt::RightButton) { //如果按下鼠标右键
qDebug()<<"你按下了鼠标右键";
} if (event->button()==Qt::MidButton) { //如果按下鼠标中键
qDebug()<<"你按下了鼠标中键";
} }
void MyLabel::mouseReleaseEvent(QMouseEvent *ev){
qDebug()<<"释放了鼠标";
}
void MyLabel::mouseMoveEvent(QMouseEvent *ev){
int i,j;
i=ev->x(); //返回x坐标---相对于控件客户区
//需要#include <QMouseEvent>
j=ev->y(); //返回y坐标---相对于控件客户区
QString str=QString("x坐标为:%1 y坐标为:%2").arg(i).arg(j);
qDebug()<<str; ulong ii;
ii=ev->timestamp(); //# 返回事件发生的时间。【以程序运行开始计时,以毫秒为单位】
qDebug()<<"事件发生时间:"<<i; if (ev->buttons()==Qt::NoButton) { //如果没有按下鼠标
qDebug()<<"你没有按下鼠标并移动";
QPointF pointf;
QPoint point,point1;
point=ev->pos(); //返回鼠标坐标值--相对于控件--QPoint(17,0)
qDebug()<<"鼠标pos值:"<<point;
point1 =mapToGlobal(point);//将控件坐标转换成屏幕坐标
qDebug()<<"相对于屏幕的坐标是:"<<point1; pointf=ev->windowPos();//返回鼠标坐标值--相对于窗口--QPointF(295,58) //point=pointf.toPoint();//将QPointF转换为QPoint qDebug()<<"鼠标windowPos值:"<<pointf; pointf=ev->screenPos();//返回鼠标坐标值--相对于屏幕--QPointF(196,271)
qDebug()<<"鼠标screenPos值:"<<pointf;
point=pointf.toPoint();
point1=mapFromGlobal(point);//将屏幕坐标转换成控件坐标 qDebug()<<"屏幕坐标是:"<<point<<"窗口坐标是:"<<point1; qDebug()<<"鼠标globalX值:"<<ev->globalX();//返回鼠标x坐标值--相对于屏幕
qDebug()<<"鼠标globalY值:"<<ev->globalY();//返回鼠标y坐标值--相对于屏幕 point=ev->globalPos();//返回鼠标坐标值--相对于屏幕--QPoint(732,292)
qDebug()<<"鼠标globalPos值:"<<point; //pointf=QPointF(point); //将QPoint转换为QPointF qDebug()<<"鼠标localPos值:"<<ev->localPos();//返回鼠标坐标值--相对于控件--QPointF(197,58) // mapToParent(QPoint) - 将控件坐标转换成父控件坐标。如果没有父控件,则相当于mapToGlobal (QPoint)
//mapFromParent(QPoint) - 将父窗口坐标转换成窗口坐标。如果没有父窗口,则相当于mapFromGlobal(QPoint)
//mapTo (QWidget, QPoint) - 将窗口坐标转换成 QWidget父窗口坐标 }
if (ev->buttons()==Qt::LeftButton) { //如果按下鼠标左键
qDebug()<<"你按下了鼠标左键并移动";
}
//注意:在mousePressEvent和mouseReleaseEvent是瞬间动作,用button()
//在mouseMoveEvent是连续动作用buttons() if (ev->buttons()==Qt::RightButton) { //如果按下鼠标右键
qDebug()<<"你按下了鼠标右键并移动";
} if (ev->buttons()==Qt::MidButton) { //如果按下鼠标中键
qDebug()<<"你按下了鼠标中键并移动";
} } void MyLabel::wheelEvent(QWheelEvent *ev){
qDebug()<<"滚轮滚动了"<<ev->angleDelta();
//angleDelta():返回轮子旋转的距离,单位为度的八分之一.
//正值表示轮子向前旋转远离用户;负值表示轮子向后旋转朝向用户--QPoint(0,120)
//大多数鼠标类型以15度为步进工作,在这种情况下,delta值是120的倍数,即120*1/8=15度
//然而,一些鼠标具有更精细的分辨率轮,并发送小于120个单位(小于15度)的delta值。为了支持这种可能性,您可以从事件中累积添加delta值,直到达到120的值,然后滚动小部件,或者您可以部分滚动小部件以响应每个轮子事件
qDebug()<<ev->pixelDelta(); //返回屏幕上以像素为单位的滚动距离。此值是在支持基于高分辨率像素的delta值的平台(如macos)上提供的。该值应直接用于在屏幕上滚动内容 }
void MyLabel::mouseDoubleClickEvent(QMouseEvent *ev){
qDebug()<<"双击了鼠标";
}

实例下载地址: https://share.weiyun.com/5zt9jZp

系统鼠标形状:

Qt::ArrowCursor=0    

Qt::UpArrowCursor=1     

Qt::CrossCursor=2      

Qt::WaitCursor=3     

Qt::IBeamCursor=4     

qt5--鼠标操作的更多相关文章

  1. Python模拟键盘输入和鼠标操作

    Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0)  #c ...

  2. c# 鼠标操作

    1#region 3using System; 4using System.Runtime.InteropServices; 6#endregion 8namespace Windows.Forms. ...

  3. opencv鼠标操作及GUI矩形绘画

    OpenCV的鼠标操作是通过一个中介函数配合回调函数来实现的.指定鼠标操作消息回调函数的函数为SetMouseCallback. void setMouseCallback(const string& ...

  4. WPF 中模拟键盘和鼠标操作

    转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...

  5. python selenium-webdriver 元素操作之鼠标操作(四)

    上节内容主要说明了元素的定位,本节内容说要说对元素的操作,元素的操作分为两部分一部分是鼠标的操作,另一种是对键盘对元素的操作,下面我们主要讲解一下鼠标对元素的操作. webdriver 模块中几种比较 ...

  6. python-web自动化-鼠标操作

    鼠标操作由ActionChains类来完成鼠标操作 perform() 执行鼠标操作move_to_element() 鼠标悬浮:最常用的操作double_click() 双击操作context_cl ...

  7. Selenium基础知识(二)鼠标操作

    一.鼠标操作 这个需要使用webdriver下的ActionChains类,这个类是操作鼠标操作的: from selenium.webdriver import ActionChains 鼠标操作可 ...

  8. selenium自动化之鼠标操作

    在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素.那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChai ...

  9. 【python】鼠标操作

    [python]鼠标操作 推荐地址:http://www.cnblogs.com/fnng/p/3288444.html --------------------------------------- ...

  10. OpenCV——图像的载入、显示、输出到文件和滑动条、鼠标操作

    图像的载入.显示.输出到文件和滑动条 滑动条 示例: 鼠标操作

随机推荐

  1. 【Linux开发】彻底释放Linux线程的资源

    Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的.而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出 ...

  2. dll的封装和使用

    背景 在windows平台下,要实现函数的封装,一般采用的是dll动态库的形式 实现了函数的封装就意味着实现过程的隐藏 可以实现跨平台和跨语言的使用 实施步骤 生成dll动态库 在VS中生成新项目,应 ...

  3. Tensor Flow基础(2.0)

    写在前面:此篇纯属自我记录,参考意义不大. 数据类型 数值型 标量Scalar:1.0,2.3等,shape为0->[] a = 1.2 向量Vector:[1.0],[2.3,5.4]等,sh ...

  4. 临时更换pip国内源

    源 地址 阿里云 http://mirrors.aliyun.com/pypi/simple/ 豆瓣 http://pypi.douban.com/simple/ 清华大学 https://pypi. ...

  5. vue-teach

    编译器的工作过程 http://www.ruanyifeng.com/blog/2014/11/compiler.html DNS 原理入门 http://www.ruanyifeng.com/blo ...

  6. win10任务切换变卡

    问题:更新之前没有任何问题,用alt+tab是秒切,更新后切换任务后会黑屏一两秒然后才转到切换页面 解决方法:关闭服务“system interface foundation service”

  7. SQL的DDL和DML

    DDL:数据定义语言,定义库.表结构用的DML:数据操作语言,增.删.改.查DCL:数据控制语言,权限.事务等控制语句 (一)DDL1.操作数据库的语句(1)查看当前DBMS中的所有数据库show d ...

  8. [c++] WINAPI

    int WINAPI WINMain 中,WINAPI含义 在windef.h头文件中有如下定义: #define WINAPI __stdcall #define APIENTRY WINAPI 函 ...

  9. [转帖]2018年的新闻: 国内首家!腾讯主导Apache Hadoop新版本发布

    国内首家!腾讯主导Apache Hadoop新版本发布   https://blog.csdn.net/weixin_34194317/article/details/88811258 腾讯也挖了很多 ...

  10. Leetcode简单题

    # Title Solution Acceptance Difficulty Frequency     1 Two Sum       44.5% Easy     2 Add Two Number ...