Qt 在Label上面绘制罗盘

news/2024/7/5 8:15:51

自己写的一个小小的电子罗盘的一个小程序,不过是项目的一部分,只可以贴绘制部分代码

 

效果如下图

 

首先开始自己写的时候,虽然知道Qt 的坐标系是从左上角开始的,所以,使用了算法,在绘制后,在移动回来,但是只有45度的时候可以实现,其它角度都是有问题的。

和前辈请教,先移动坐标在绘制,在使用过程中,忘记调用

painter1.save();

函数,到时失败,仔细检查是才发现少些了一行。

 

上核心代码

 

void MainWidget::draw_Direction()
{QPainter painter1(ui->label_Direction);painter1.setRenderHint(QPainter::Antialiasing,true);painter1.setPen(QPen(QColor(Qt::blue),1.5,Qt::SolidLine,Qt::FlatCap));/** move pointQTransform t_y;t_y.rotate(-90,Qt::YAxis);painter1.setTransform(t_y);int temp =30;QTransform t_z;t_z.rotate(temp,Qt::ZAxis);painter1.setTransform(t_z);painter1.translate(0+135*qCos(30*PI/180.0),0-135*qSin(30*PI/180.0));painter1.translate(0-39+96,0-39-96);painter1.translate((0-(((135/(qCos(45*PI/180.0)))*qSin((temp+45)*PI/180.0)-135)*(qSin(temp*PI/180.0)))+(135-((135/(qCos(45*PI/180.0)))*qCos((temp+45)*PI/180.0)))),((0-(((135/(qCos(45*PI/180.0)))*qSin((temp+45)*PI/180.0)-135)*(qCos(temp*PI/180.0))))-(135-((135/(qCos(45*PI/180.0)))*qSin((temp+45)*PI/180.0)))));painter1.translate(0-((TEMP_R*qSin((temp+45)*PI/180.0))-135)*qCos((temp)*PI/180.0)+(TEMP_R*qCos((temp)*PI/180.0))* qCos((temp)*PI/180.0),0-((TEMP_R*qSin((temp+45)*PI/180.0))-135)*qSin((temp)*PI/180.0)-(TEMP_R*qCos((temp)*PI/180.0))* qSin((temp)*PI/180.0));qDebug()<<(TEMP_R*qCos((temp)*PI/180.0))* qSin((temp)*PI/180.0);*/painter1.translate(135,135);painter1.save();painter1.rotate(num_Angle);for(int i = 0;i<360;){if((i%90) == 0){painter1.drawLine(0+(95*qSin(i*PI/180.0)),0-(95*qCos(i*PI/180.0)),0+(100*qSin(i*PI/180.0)),0-(100*qCos(i*PI/180.0)));i=i+30;}painter1.drawLine(0+(95*qSin(i*PI/180.0)),0-(95*qCos(i*PI/180.0)),0+(110*qSin(i*PI/180.0)),0-(110*qCos(i*PI/180.0)));i=i+30;}for(int j = 0;j<360;){if((j%30) == 0 || (j%90) == 0){j= j+10;}painter1.drawLine(0+(100*qSin(j*PI/180.0)),0-(100*qCos(j*PI/180.0)),0+(110*qSin(j*PI/180.0)),0-(110*qCos(j*PI/180.0)));j=j+10;}painter1.setPen(QPen(QColor(Qt::blue),3,Qt::SolidLine,Qt::FlatCap));QRect rect1(-7,-113,15,15);QRect rect1_1(-7,-95,15,15);QRect rect2(-112,-9,15,15);QRect rect3(-7,103,15,15);QRect rect4(100,-9,15,15);QString str_N = "N";QString str_S = "S";QString str_W = "W";QString str_E = "E";QFont font("宋体",16,QFont::Bold);painter1.setFont(font);painter1.drawText(rect1,Qt::AlignCenter,str_N);painter1.drawText(rect2,Qt::AlignCenter,str_W);painter1.drawText(rect3,Qt::AlignCenter,str_S);painter1.drawText(rect4,Qt::AlignCenter,str_E);QPixmap pixmap_pointer;pixmap_pointer.load(":/Global/Source/Global/Pointer.png");painter1.drawPixmap(rect1_1,pixmap_pointer);painter1.restore();QRect rect_pixmap(-15,-15,30,30);QPixmap pixmap_plane;pixmap_plane.load(":/Global/Source/Global/Plane.png");painter1.drawPixmap(rect_pixmap,pixmap_plane);
}

 

 

 

至于好多人不知道怎么在Lable上面绘图,可以参考我以前写的

Qt 在控件上面绘图 label,pushbutton。。。。。

http://blog.csdn.net/z609932088/article/details/50952086

 

 

 

转载于:https://www.cnblogs.com/DreamDog/p/9160135.html


http://lihuaxi.xjx100.cn/news/268472.html

相关文章

Facebook 万字长文:AI 模型全部迁移至 PyTorch 框架

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达转自 | 新智元来源 | Facebook AI Blog编辑 | LQ、yaxin2017年&#xff0c;PyTorch诞生&#xff0c;成为当下最流行的深度学习框架。近日&#xff0c;Facebook宣布让PyTorch…

梯度下降到底是什么?

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达我们回忆深度学习“三板斧”&#xff1a;1. 选择神经网络2. 定义神经网络的好坏3. 选择最好的参数集合其中步骤三&#xff0c;如何选择神经网络的好坏呢&#xff1f;梯度下…

GPT-3 的到来,程序员会被 AI 取代吗?

无需任何训练&#xff0c;AI可用任何语言编程。作者 | Frederik Bussler译者 | 弯月&#xff0c;责编 | 晋兆雨头图 | CSDN 下载自东方 IC来源 | CSDN以下为译文&#xff1a;2017年的时候&#xff0c;曾有研究人员问&#xff1a;到2040年人工智能是否承担起大多数的编程工作&am…

正则表达式的概述

1. 正则表达式的介绍 在实际开发过程中经常会有查找符合某些复杂规则的字符串的需要&#xff0c;比如:邮箱、图片地址、手机号码等&#xff0c;这时候想匹配或者查找符合某些规则的字符串就可以使用正则表达式了。 正则表达式是匹配符合某些规则的字符串数据 2. 正则表达式概念…

leetcode004 Median_of_Two_Sorted_Arrays.py

"""给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数&#xff0c;并且要求算法的时间复杂度为 O(log(m n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 [1, 3] nums2 [2]则中位数是 2.0 示例 2:nums1 [1, 2]…

Unity的三种Interceptor

Unity默认提供了三种拦截器&#xff1a;TransparentProxyInterceptor、InterfaceInterceptor、VirtualMethodInterceptor。 TransparentProxyInterceptor&#xff1a;代理实现基于.NET Remoting技术&#xff0c;它可拦截对象的所有函数。缺点是被拦截类型必须派生于MarshalByRe…

搭建samba服务器

先安装samba服务器&#xff0c; 常规安装 sudo apt-get install samba 这种方式在不同版本ubuntu中&#xff0c;由于库版本支持问题&#xff0c;可能是无法安装的&#xff0c;所以需要降库版本来安装&#xff0c;安装命令为&#xff1a;sudo aptitude install samba ,这样执行后…

C# 多态的实现

C# 多态的实现 封装、继承、多态&#xff0c;面向对象的三大特性&#xff0c;前两项理解相对容易&#xff0c;但要理解多态&#xff0c;特别是深入的了解&#xff0c;对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践&#xff0c;封装、继承在实际…