Qt 在Label上面绘制罗盘
自己写的一个小小的电子罗盘的一个小程序,不过是项目的一部分,只可以贴绘制部分代码
效果如下图
首先开始自己写的时候,虽然知道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 point
QTransform 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
Qt 在Label上面绘制罗盘的更多相关文章
- Qt之图形(绘制文本)
简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPaint ...
- Qt 让Label显示图片并把图片居中
Qt 让Label显示图片并把图片居中 QPixmap image("./13.jpg"); QPixmap fitpixmap=image.scaled(ui->lab ...
- QT中文字的绘制
为什么要做这次文字的介绍,因为在一般的教材中,还真没有文字的描述: 1.绘制最简单的文字. 我们更改重绘函数如下: void Dialog::paintEvent(QPaintEvent *){QPa ...
- Qt之图形(绘制漂亮的圆弧)
简述 综合前面对二维绘图的介绍,想必我们对一些基本绘图有了深入的了解,下面我们来实现一些漂亮的图形绘制. 简述 圆形 效果 源码 弧形 效果 源码 文本 效果 源码 旋转 效果 源码 圆形 经常地,我 ...
- QT内label控件通过opencv显示图像
1.对pro进行配置.使其可以理解opencv. INCLUDEPATH+=d:\opencv249\include\opencv\ d:\opencv249\include\opencv2\ d:\ ...
- qt在tableview中绘制图片
void ItemModelDeletage::paint(QPainter *painter, const QStyleOptionViewItem &option, const QMode ...
- Qt 2D绘图之一:基本图形绘制和渐变填充
Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QP ...
- OpenCV【2】---读取png图片显示到QT label上的问题
问题一: 操作图片test.png是一个365x365的PNG图片 通过OpenCV自带的GUI显示出来图像是没问题的,例如以下操作代码所看到的: QStringfileName=QFileD ...
- 使用QT绘制一个多边形
目录 1. 概述 2. 实现 2.1. 代码 2.2. 解析 3. 结果 1. 概述 可以通过QT的重绘事件和鼠标事件来绘制多边形,最简单的办法就是在继承QWidget的窗体中重写paintEvent ...
随机推荐
- 2017.9.5 Java知识点总结
1.*程序的数据操作往往都在内存中操作的,也就是说数据运算都在内存中完成. 2.*什么是变量? --变量就是内存中的一块用来存放数据的存储单元. --变量中的值可变 --我们通过变量名就可以找到内存中 ...
- 【遥感专题系列】微波遥感(二、合成孔径雷达SAR基础)
目前使用最广的成像雷达系统就是合成孔径雷达(Synthetic Aperture Radar:SAR),SAR几乎成为了雷达的代名词.本文从应用角度介绍SAR系统的基本知识. 本文主要包括: SAR基 ...
- 搜索自动提示的简单模拟JQuery
使用jQuery实现类似于百度搜索时的自动完成功能,界面效果 所示. 首先在输入框上注册keyup事件,然后在事件中通过AJAX获取JSON对象.取得数据后,每一项数据创建一个li标签,在标签上注册c ...
- HDU 1210 Eddy's 洗牌问题(找规律,数学)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1210 Eddy's 洗牌问题 Time Limit: 2000/1000 MS (Java/Other ...
- Tomcat 启动速度优化
创建一个web项目 选择发布到 汤姆猫 的下面 deploy path: 表示发布到的文件名称 把项目添加到 tomcat 里,运行,我们可以在 tomcat里找到我们发布的项目: 现在启动时间: 现 ...
- python的格式化输出(format,%)
皇城PK Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是format这根本就不算个问 ...
- ABAP术语-Lock Argument
Lock Argument 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/29/1085717.html Locked fields in ...
- Maven里面多环境下的属性过滤(配置)
情景:通常一个项目都为分为开发环境(dev)和测试环境(test)还有正式环境(prod),如果每次一打包都要手动地去更改配置文件,例如数据库连接配置.将会很容易出差错. 解决方案:maven pro ...
- jstl的<c:set 的问题
在使用jstl提供的set标签对javabean进行处理的时候发现直接打bean的名字会错 <jsp:useBean id="kkk" class="com.log ...
- Sql Server 查看存储过程最后修改时间
Sql Server 查看存储过程最后修改时间 select * from sys.procedures order by modify_date desc