#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. android webview 添加内置对象

    package com.android.EBrowser; import android.app.Activity;import android.graphics.Rect;import androi ...

  2. OpenStack组件——cinder存储服务

    1.cinder 介绍 1)理解 Block Storage 操作系统获得存储空间的方式一般有两种: (1)通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文 ...

  3. webdriervAPI(WebElement接口常用方法)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  4. 页面可见性改变事件 : visibilitychange 详解

    1.Page Visibility API标准概述 查看W3C的官方文档时候看到这个属性 标准时间线是这样介绍的: Page Visibility Level 2 W3C Proposed Recom ...

  5. Laravel 查询&数据库&模型

    1.with()与load区别: 都称为 延迟预加载,不同点在于 load()是在已经查询出来的模型上调用,而 with() 则是在 ORM 查询构造器上调用. Order::query()-> ...

  6. 用ufile和S3代替hdfs存储数据

    一,添加ufile需在配置中添加: core-site.xml添加如下配置:<property><name>fs.ufile.impl</name><valu ...

  7. SpringBoot项目打成Jar包时运行

    使用java -jar ***.jar执行jar包的时候,会找jar包中的main()方法. 对于SpringBoot项目的Jar包,在META-INF目录下的MANIFEST.MF文件中,Main- ...

  8. 快速部署单节点RancherServer

    已安装 docker,并配置docker国内镜像源 docker version docker pull rancher/rancher:v2.2.0 docker run -d -p 80:80 - ...

  9. Java小程序—录屏小程序(下半场)

    下半场. 上半场,我们我们写了录屏的程序,那么下半场我们的任务是写一个播放器. 设计思路:播放器的思路就是将图片放在一个JScrollPane中顺序播放,所以还是得使用swing组件,并且仍然要使用线 ...

  10. Codeforces 1194D. 1-2-K Game

    传送门 先考虑只能走 $1,2$ 步的情况,设 $p[i]$ 表示当 $n=i$ 时先手是否必胜 自己手玩一下发现 $p$ 就是 $011011011...011$ 这样循环(下标从 $0$ 开始,其 ...