Qt编写雷达模拟仿真工具1-背景布局
创始人
2024-05-02 18:57:38
0

一、前言

雷达模拟仿真工具,整体结构采用的QGraphicsView框架,背景布局采用的分层绘制,这样可以控制该需要重新绘制的重新绘制,不需要重新的绘制的就没必要再多余的浪费,这里定义了一个GraphicsBackGroundItem类继承自QGraphicsItem用于背景图的绘制。

二、雷达模拟仿真工具介绍

雷达模拟仿真工具,主要通过模拟点模拟相关物体,方位、航向角、距离、速度,并且显示相关详情信息可建立跟踪线建立与模拟点联系。可自定义更换模拟点背景达到更加逼真效果,如歼击机,航母发射导弹效果,指挥所被打击爆炸效果。在距离上可自由控制距离缩放,也可建立危险等级制度的区域范围显示,也可激光雷达航向距离控制发射。这过程中会运用到很多数学计算,也有对模拟点组合效果。

三、功能特点

  1. 设计点由背景,功能按钮,雷达区域,频谱区域,缩放模块,信息点采集模块组成;
  2. 背景采用分层绘制达到绘制性能的最优化;
  3. 功能按钮增设了相关雷达功能点;
  4. 雷达区域为核心模块,包含模拟点各种功能效果,危险等级区域绘制,激光雷达等功能;
  5. 频谱区域主要显示音频频谱效果;
  6. 缩放模块控制雷达区域缩放效果;
  7. 信息采集区域采集雷达区域相关数据信息点数据展示;
  8. 可支持换肤;
  9. 可支持音频频谱显示;
  10. 可支持任意随机添加模拟点;
  11. 可支持自定义背景添加模拟点;
  12. 可支持方位,航向角,距离,速度,目标体真实图自定制;
  13. 可支持危险区域并且可等级划分,方位,角度,距离,危险提示信息等显示;
  14. 可支持激光发射模拟;
  15. 支持雷达图放大缩小显示;
  16. 可支持模拟点编辑设置;
  17. 可支持模拟点跟踪线设置;
  18. 可支持模拟点详细数据查看;
  19. 可支持增加添加目标体预览功能;
  20. 可支持增加航母目标体;
  21. 可支持增加歼击机目标体;
  22. 可支持增加指挥所目标体;
  23. 可支持增加航母炮弹攻击指挥使效果;
  24. 可支持增加航母导弹攻击指挥使效果;
  25. 可支持增加歼击机炮弹攻击指挥使效果;
  26. 可支持增加歼击机导弹攻击指挥使效果;
  27. 可支持增加指挥使被炸前,中, 后三种状态效果;

四、核心代码

  1. 背景表格
    int rowgridCount = 6;int columngridCount = 6;painter.save();QPen pen;QColor tmpColor = AppInstance::getInstance()->foreGroundColor;tmpColor.setAlpha(150);pen.setColor(tmpColor);pen.setCapStyle(Qt::RoundCap);pen.setWidthF(0.5);painter.setPen(pen);QRectF girdRect = rect.adjusted(6, 6, -6, -6);qreal girdHeight = girdRect.height() * 1.0 / columngridCount;qreal girdWidth = girdRect.width() * 1.0 / rowgridCount;for (int row = 0; row <= rowgridCount; row++) {painter.drawLine(girdRect.x(), girdRect.y() + girdHeight * row, girdRect.x() + girdRect.width(), girdRect.y() + girdHeight * row);}for (int column = 0; column <= columngridCount; column++) {painter.drawLine(girdRect.x() + girdWidth * column, girdRect.y(), girdRect.x() + girdWidth * column, girdRect.y() + girdRect.height());}painter.restore();
  1. 绘制圆弧
	painter.save();painter.setBrush(AppInstance::getInstance()->foreGroundColor);QPainterPath ellipsePath;painter.translate(-radius, -radius);ellipsePath.addEllipse(0, 0, 2 * radius, 2 * radius);QPainterPath subPath;int arcWidth = 6;subPath.addEllipse(arcWidth, arcWidth, 2 * (radius - arcWidth), 2 * (radius - arcWidth));ellipsePath -= subPath;painter.drawPath(ellipsePath);painter.restore();
  1. 绘制刻度盘
		painter.save();painter.setPen(AppInstance::getInstance()->foreGroundColor);QFont font = painter.font();font.setPointSize(12);font.setWeight(60);painter.setFont(font);int scaleMajor = 36;radius -= 26;qreal q = 0;for (int i = 0; i < scaleMajor; i++) {int value = 1.0 * i * (360 / scaleMajor);QString strValue = QString("%1").arg(value, 3, 10, QLatin1Char('0'));painter.save();painter.rotate(q);qreal l = painter.fontMetrics().width(strValue) / 2.0;painter.drawText(QPointF(-l, -radius), strValue);painter.restore();q = q + 10;}painter.restore();
  1. 绘制圆弧背景蒙层
		int aphpaRadius = radius - 6;QColor tmpcolor = AppInstance::getInstance()->foreGroundColor;tmpcolor.setAlpha(10);painter.save();painter.setPen(Qt::NoPen);painter.setBrush(tmpcolor);painter.translate(-aphpaRadius, -aphpaRadius);painter.drawEllipse(0, 0, 2 * aphpaRadius, 2 * aphpaRadius);painter.restore();
  1. 绘制刻度
		int scaleMajor = 36;radius -= 6;painter.save();painter.rotate(0);int subScaleMajor = 10;int midScaleMajor = subScaleMajor / 2;int steps = (scaleMajor * subScaleMajor);double angleStep = 360.0 / steps;QPen pen;pen.setColor(AppInstance::getInstance()->foreGroundColor);pen.setCapStyle(Qt::RoundCap);for (int i = 0; i <= steps; i++) {if (i % subScaleMajor == 0) {pen.setWidthF(1.5);painter.setPen(pen);painter.drawLine(0, radius - 15, 0, radius);if (i % (subScaleMajor * 9) == 0) {pen.setWidthF(2.0);QColor linecolor = AppInstance::getInstance()->foreGroundColor;linecolor.setAlpha(100);pen.setColor(linecolor);painter.setPen(pen);painter.drawLine(0, radius - lineWidth, 0, radius);}}else if (i % midScaleMajor == 0) {pen.setWidthF(1.0);painter.setPen(pen);painter.drawLine(0, radius - 10, 0, radius);}else {pen.setWidthF(0.5);painter.setPen(pen);painter.drawLine(0, radius - 5, 0, radius);}painter.rotate(angleStep);}painter.restore();

五、效果图

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...