Qt编写雷达模拟仿真工具2-自定义QGraphicsItem按钮

news2024/9/28 17:33:12

一、前言

雷达模拟仿真工具,整体结构采用的QGraphicsView框架,场景需要设计一个可点击的自定义按钮出来,在QGraphicsView中一切基础元素点都是基于QGraphicsItem,在QGraphicsItem类中我们可以看到它不继承自QObject,那意味着想要点击信号不可取,而Qt提供了QGraphicsObject类,可以看到它继承了QObject和QGraphicsItem,那么我们只需要自定义一个类继承QGraphicsObject即可完成我们需要的功能,核心部分看代码部分即可。

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

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

三、功能特点

  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. 可支持增加指挥使被炸前,中, 后三种状态效果;

四、核心代码

自定义GraphicsButtonItem类继承自QGraphicsObject,收到按钮点击mousePressEvent事件后发射了clicked()信号,在外侧需要的地方绑定此信号,做相应槽函数响应即可。

GraphicsButtonItem::GraphicsButtonItem(QGraphicsItem *parent) :QGraphicsObject(parent)
{
	setCursor(QCursor(Qt::PointingHandCursor));
	initButton();
}

GraphicsButtonItem::~GraphicsButtonItem()
{

}

void GraphicsButtonItem::initButton()
{
	QPixmap pixmap(40, 40);
	pixmap.fill(Qt::transparent);
	QPainter painter(&pixmap);
	painter.setRenderHints(QPainter::Antialiasing);
	painter.setPen(Qt::NoPen);
	painter.setBrush(AppInstance::getInstance()->foreGroundColor);
	painter.drawRoundedRect(0, 0, 40, 40, 4, 4);
	setButtonPixmap(pixmap);
}

void GraphicsButtonItem::setButtonPixmap(const QPixmap& pixmap)
{
	prepareGeometryChange();
	m_pix = pixmap;
	update();
}

void GraphicsButtonItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
	if (event->button() == Qt::LeftButton)
		emit clicked();
	QGraphicsObject::mousePressEvent(event);
}

QSizeF GraphicsButtonItem::size() const
{
	return m_pix.size();
}

QRectF GraphicsButtonItem::boundingRect() const
{
	return QRectF(QPointF(0, 0), size());
}

void GraphicsButtonItem::setText(const QString& text)
{
	m_text = text;
	update();
}

void GraphicsButtonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
	painter->save();
	painter->drawPixmap(0, 0, m_pix);
	painter->setPen(QColor(255, 255, 255, 150));
	painter->setBrush(Qt::NoBrush);
	QFont font = painter->font();
	font.setFamily("Microsoft YaHei");
	font.setBold(true);
	font.setPointSize(12);
	painter->setFont(font);
	painter->drawText(boundingRect(), Qt::AlignCenter, m_text);
	painter->restore();
}

五、效果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

25万美金奖励章鱼加速器2022冬季获胜团队!

全长 1427 字,预计阅读 6 分钟 作者:MiX 2022年12月21日,章鱼加速器2022年冬季 Web3 创业营圆满落幕,61个入营项目中有5个脱颖而出,获得「章鱼未来之星」称号,排名不分先后,他们分别是&#xf…

第五章. 可视化数据分析图表—Seaborn图表(折线图,直方图,条形图,散点图)

第五章. 可视化数据分析图 5.7 Seaborn图表 Seaborn是一个基于Matplotlib的高级可视化效果库,偏向于统计图表,主要针对的是数据挖掘和机器学习中的变量特征选取,相比Matplotlib,他的语法相对简单,但是具有一定的局限性…

Windows下安装oracle19c

oracle 19c 不支持 Windows 7 和 Windows 8 以及 Windows Server 2008(GetOverlappedResultEx function 函数不支持 win7),支持 Windows 8.1 以上及 Windows Server 2012 1.下载地址: https://www.oracle.com/database/technolo…

Gnoppix Linux 22.12 发布

导读基于 Kali Linux 的 Linux 滚动发行版 Gnoppix 22.12 带来了 GNOME 43、Linux 内核 6.0 和新的升级。作为传统的现场 CD 发行版 Knoppix 项目的继承者,Gnoppix Linux 是专门为渗透测试和反向工程而设计的。它为网页应用安全和数字权利保护进行了优化。除了对安全…

DNA甲基化重编程为红梨中光诱导的花青素生物合成提供了见解

期刊:Plant Science 影响因子:5.363 发表时间:2022 样本类型:果皮 客户单位:南京农业大学 凌恩生物客户南京农业大学吴俊团队发表在《Plant Science》上的文章“DNA methylatio…

【Ctfer训练计划】——(七)

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

【数据结构】LinkedList与链表

作者:✿✿ xxxflower. ✿✿ 博客主页:xxxflower的博客 专栏:【数据结构】篇 语录:⭐每一个不曾起舞的日子,都是对生命的辜负。⭐ 文章目录✿1.ArrayList的缺陷✿2.链表2.1链表的概念及结构2.2链表的模拟实现MySingleLi…

aws eks 集群container runtime升级容器管理工具的切换

参考资料 https://cloud-atlas.readthedocs.io/zh_CN/latest/kubernetes/debug/crictl.htmlhttps://zhuanlan.zhihu.com/p/562014518 container runtime Low-Level和High-Level容器运行时。runc、lxc、lmctfy、Docker(容器)、rkt、cri-o。每一个都是为…

springboot simple (12) springboot RabbitMQ

这里首先简单的介绍了RabbitMQ ,然后实现了springboot集成RabbitMQ ,包含两个工程: 1 Producer 生产者 2 Consumer 消费者 1 RabbitMQ 简介 AMQP :Advanced Message Queue,高级消息队列协议。 RabbitMQ 是一个由 Erl…

智能大屏兴起,酷开科技赋能营销战略!

随着科技的发展,智能大屏的功能与技术都在日新月异的快速更迭,年轻消费群体也对大尺寸智能大屏表现出了特别的偏爱,以前说到看视频、网上购物、阅读书籍时,人们第一时间就会想到手机,但随着智能大屏的出现,…

商用设计素材库,设计师必备。

免费、商用设计素材网站。 1、菜鸟图库 https://www.sucai999.com/?vNTYxMjky站内平面海报、UI设计、电商淘宝、免抠、高清图片、样机模板等素材非常齐全。还有在线抠图、CDR版本转换功能,能有效的为设计师节省找素材时间,提高工作效率。网站素材都能免…

LeetCode链表经典题目(二)

1. LeetCode203. 移除链表元素 2. LeetCode707.设计链表 3. LeetCode206. 反转链表 4. LeetCode24. 两两交换链表中的节点​ 5. LeetCode19. 删除链表的倒数第 N 个结点 6. LeetCode面试题 02.07. 链表相交 7. LeetCode142. 环形链表 II​ 1. LeetCode203. 移除链表元素 …

基于同豪的道路桥梁设计方案如何实现数字化交付(web发布)

0序: 当下有部分设计人员除了使用Revit、Microstation之外也使用过程的同豪软件进行道路桥梁的BIM建模。如何对同豪的BIM模型进行数字化交付呢? 1数据导出为FBX 具体导出过程可以参考: 数据的导出只要按步骤导出就行,非常简单…

2023最让人期待的日历!每个IT技术人必备

一转眼,2022年已经要接近尾声了..... 这一年的你过的怎么样呢?相比上一年的自己有什么变化呢? 凡是过往皆为序章,所有将来皆为可盼!在2023年即将到来之际给大家推荐一本非常适合IT技术人的日历👉「小滴日历…

python—you-get下载工具、wget下载工具

目录 wget you-get wget wget工具下载:GNU Wget 1.21.3 for Windows wget工具见:python-外部程序的调用os库、subprocess 模块_觅远的博客-CSDN博客_python外部库调用调出 you-get you-get是一款实用的网站视频下载工具。可以很轻松的下载到网络上…

极限学习机ELM回归预测(MATLAB代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

【数据结构与算法】第十七篇:图论万字解析(进阶篇)

👀作者简介:大家好,我是 快到碗里来~ 🚩🚩 个人主页:快到碗里来~ 支持我:点赞关注~不迷路🧡🧡🧡 ✔系列专栏:数据结构与算法⚡⚡⚡ (❁◡❁)励志格…

代码随想录算法训练营第十一天(栈与队列)| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

代码随想录算法训练营第十一天(栈与队列)| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值 20. 有效的括号 讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。 大家先…

激发原创力量,逐梦数智未来 | 麒麟信安闪耀openEuler Summit 2022

[中国,北京,2022年12月29日]由欧拉开源社区发起并联合华为、麒麟信安、麒麟软件、统信软件等伙伴,共同举办的openEuler Summit 2022于线上举行。 会上,开放原子开源基金会宣布openEuler项目群成立;同时,新…

CVPR 2021|Deep-SfM-Revisited:DeepLearn+经典SfM流程

🏆前言:文章回顾了深度学习在SfM中的应用,并提出了一种新的深度两视图SfM框架。该框架结合了深度学习和经典SfM几何算法的优点。在各个数据集上取得较好的结果。 文章目录解决的问题基本流程实施细节光流估计相机位姿估计尺度不变的深度估计损…