qt5--鼠标操作

#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--鼠标操作的更多相关文章
- Python模拟键盘输入和鼠标操作
Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0) #c ...
- c# 鼠标操作
1#region 3using System; 4using System.Runtime.InteropServices; 6#endregion 8namespace Windows.Forms. ...
- opencv鼠标操作及GUI矩形绘画
OpenCV的鼠标操作是通过一个中介函数配合回调函数来实现的.指定鼠标操作消息回调函数的函数为SetMouseCallback. void setMouseCallback(const string& ...
- WPF 中模拟键盘和鼠标操作
转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...
- python selenium-webdriver 元素操作之鼠标操作(四)
上节内容主要说明了元素的定位,本节内容说要说对元素的操作,元素的操作分为两部分一部分是鼠标的操作,另一种是对键盘对元素的操作,下面我们主要讲解一下鼠标对元素的操作. webdriver 模块中几种比较 ...
- python-web自动化-鼠标操作
鼠标操作由ActionChains类来完成鼠标操作 perform() 执行鼠标操作move_to_element() 鼠标悬浮:最常用的操作double_click() 双击操作context_cl ...
- Selenium基础知识(二)鼠标操作
一.鼠标操作 这个需要使用webdriver下的ActionChains类,这个类是操作鼠标操作的: from selenium.webdriver import ActionChains 鼠标操作可 ...
- selenium自动化之鼠标操作
在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素.那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChai ...
- 【python】鼠标操作
[python]鼠标操作 推荐地址:http://www.cnblogs.com/fnng/p/3288444.html --------------------------------------- ...
- OpenCV——图像的载入、显示、输出到文件和滑动条、鼠标操作
图像的载入.显示.输出到文件和滑动条 滑动条 示例: 鼠标操作
随机推荐
- 【Linux开发】linux设备驱动归纳总结(四):5.多处理器下的竞态和并发
linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- 云风协程库coroutine源码分析
前言 前段时间研读云风的coroutine库,为了加深印象,做个简单的笔记.不愧是大神,云风只用200行的C代码就实现了一个最简单的协程,代码风格精简,非常适合用来理解协程和用来提升编码能力. 协程简 ...
- Elasticsearch-更新现有文档
ES-更新现有文档 ES的更新API允许发送文档所需要做的修改,而且API会返回一个答复,告知操作是否成功.更新流程如下 1. 检索现有的文档.为了使这步奏效,必须打开_source字段,否则ES并不 ...
- python函数 -- 作用域,异常处理
1.def语句和参数 python定义函数的关键词为def,格式如下: def 函数名([变元],[变元],....) #保存在变元中的值,在函数返回后该变元就会被销毁了. 2.返回 ...
- Maven简单项目及命令使用
项目结构如下 HelloWorld.java package pak1; public class HelloWorld { public String sayHello(){ return &quo ...
- 对C++类的继承和派生的理解
C++中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产. 1.继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程. ...
- linux_文本编译使用命令
一:字符模式与shell命令 字符界面和图形界面 字符界面优点: 1):系统执行效率高,稳定性高,执行结果可直接返回 2):节省系统资源,对一个服务器至关重要 3):节省大量网络开销,大幅降低运行成本 ...
- python网络爬虫(8)多媒体文件抽取
目的 批量下载网页图片 导入库 urllib中的request中的urlretrieve方法,可以下载图片 lxml用于解析网页 requests用于获取网站信息 import urllib from ...
- sql server join联结
join学习起来有点乱,现做如下整理: table A id abc 1 a 2 b 3 c 4 d table B id abc 1 e 2 a 3 f 4 c --join或者inner join ...
- Angular获取dom元素,以及父子组建之间相互传值
1.使用原生js代码获取dom元素 在ts文件中有一个ngOnInit()的方法,这个方式是指在模块加载完毕之后并不是dom加载完毕,也就是说如果你的dom元素中使用的angular的指令,然后想在这 ...