博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt实现图片跟随鼠标的方向旋转
阅读量:3949 次
发布时间:2019-05-24

本文共 1049 字,大约阅读时间需要 3 分钟。

在平时的项目中遇到了类似QQ宠物眼睛需要跟随鼠标,经过了简单的思索和查找资料,使用定时器加QCursor::pos()获取鼠标的全局坐标,并使用paintEvent来绘制旋转图。

获取坐标

使用QCursor::pos();获取鼠标绝对坐标,

WindowsPt_X和WindowsPt_Y 为相对检测点坐标
使用atan2(函数)来获取角度,使用C++库需要std::
将角度转成1-180度这种单位。tmp*180/3.14,这个方法精度不高,但不需要太高精度。

MousePt = QCursor::pos();//获取鼠标的绝对位置WindowsPt_X = WindowsPt_X+60;WindowsPt_Y = WindowsPt_Y+70;double tmp = std::atan2((this->MousePt.y()-WindowsPt_Y),(this->MousePt.x()-WindowsPt_X));Angle= tmp*180/3.14;

paintEvent()显示图片

获取角度后可以使用rotate()函数来旋转图片,但需要使用translate()函数来改变所旋转坐标系的原点

之后通过painter.restore()恢复,与painter.save()保存的交替使用来实现效果。

void MyLabel::paintEvent(QPaintEvent* e ){
QPainter painter(this);QPixmap pix,pix1;pix.load(":/20140526172329156.png");pix1.load(":/eye.png");painter.drawPixmap(0,0,100,100,pix);painter.save();painter.translate(0,0);painter.translate(30,30);painter.rotate(R);painter.translate(-30,-30);painter.drawPixmap(10,10,40,40,pix1);painter.restore();painter.save();painter.translate(65,30);painter.rotate(R);painter.translate(-65,-30);painter.drawPixmap(45,10,40,40,pix1);painter.restore();}

在这里插入图片描述

转载地址:http://cuewi.baihongyu.com/

你可能感兴趣的文章
点击出现对应界面(第二个界面可以选择显示内容)------Sestid
查看>>
Js实现炫酷仿抖罗盘时钟------Sestid
查看>>
vivo官网鼠标触碰图片拉长------Sestid
查看>>
canvas画布实现的集中效果
查看>>
Js实现点击置顶效果(带动画)
查看>>
Js实现input全选、全不选、反选功能------Sestid
查看>>
纯css实现好看的背景------Sestid
查看>>
为什么我的CSDN上都是开关灯??????Js实现开灯关灯特效
查看>>
Js实现生成自定义输入行列宽高表格------Sestid
查看>>
Js实现购物车加减,价格计算等功能
查看>>
Js自定义快捷键并实现上下左右移动
查看>>
面试看这里!!!2020年前端面试知识点(持续更新)
查看>>
纯CSS实现轮播图------Sestid
查看>>
CSS实现自动播放相册------Sestid
查看>>
JavaScript四种基础的排序方法
查看>>
这里有美女!!!!抖音上很火的3D立体动态相册的实现(纯CSS)
查看>>
一张图让您看懂git,看不懂我也没办法了。。。。。。。。
查看>>
Es6字符串和数组的新方法---自己在控制台都可以看到
查看>>
喜欢NBA的朋友快来这里看第一阶段的全明星投票结果!!!(更新到第二阶段、第三阶段)
查看>>
TCP的三次握手与四次挥手看完这篇文章您要是不理解,那我也没什么办法了!!!
查看>>