当前位置: 首页 > news >正文

Qt之漂亮的地球

        这个画的是一个东西围绕着中心的地球不停的旋转,可以放在界面的中部,增加美感。

        展示     

界面展示

        设计过程

        标题在之前的博客有写过,这里不再重复

        下面是关于地球旋转的相关

        1.资源文件添加

        先将相关的资源文件添加,三个图片

        2.导入到pixmap

void CDynamicsEarth::resizeEvent(QResizeEvent *event)
{/*创建一个新的 QPixmap 对象,该对象从资源文件加载名为 "map.png" 的图像使用 .scaledToWidth(244, Qt::SmoothTransformation) 方法将这个图像缩放到宽度为 244 像素,使用平滑变换算法。最后,将缩放后的图像赋值给成员变量 m_pixBg。*/m_pixBg = QPixmap(":/image/res/map.png").scaledToWidth(244, Qt::SmoothTransformation);//地球的图片m_pixMask1 = QPixmap(":/image/res/lbx.png").scaledToWidth(300, Qt::SmoothTransformation);//周围动的网状图m_pixMask2 = QPixmap(":/image/res/jt.png").scaledToWidth(281, Qt::SmoothTransformation);//蓝狐
}

        3.绘制静止图像,重写paintEvent函数

 QPainter painter(this);//设置渲染提示。这些提示会影响绘制的视觉效果。这里设置了三个提示:抗锯齿、平滑图像变换和文本抗锯齿。painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing); // 抗锯齿和使用平滑转换算法if (!m_pixBg.isNull()){//在画布的中心位置绘制m_pixBg图像。计算位置的方式确保图像居中,画地球painter.drawPixmap((width() - m_pixBg.width()) >> 1, (height() - m_pixBg.height()) >> 1, m_pixBg);//>>1右移一位表示除以2}if (!m_pixMask2.isNull()){painter.save();//保存当前的绘图状态。这是为了后面能够恢复到这个状态。painter.translate(rect().center());//将绘图的原点移动到当前部件的中心。painter.setOpacity(0.3);//设置绘制的透明度为0.3,这意味着绘制的内容会有30%的不透明度。painter.rotate(-angle);//根据变量angle的负值旋转绘制的图像。这可能是为了实现某种视觉效果,例如旋转遮罩  -号是顺时针painter.drawPixmap(-m_pixMask2.width() >> 1, -m_pixMask2.height() >> 1, m_pixMask2);//画出旋转的网状,在地球的周围painter.restore();//恢复之前保存的绘图状态}if (!m_pixMask1.isNull()){painter.save();painter.translate(rect().center());painter.rotate(angle);painter.drawPixmap(-m_pixMask1.width() >> 1, -m_pixMask1.height() >> 1, m_pixMask1);painter.restore();}

         4.启动定时器,设置刷新,角度不停的改变,重写timeEvent

void CDynamicsEarth::timerEvent(QTimerEvent *event)
{angle = (++angle % 360);//旋转不同的角度update();
}

        

相关文章:

  • Android编程权威指南(第四版)- 第 4 章 UI状态的保存与恢复
  • 记录学习--java abstract与interface使用区别
  • Vivado-IP核
  • vue3+vite+ts 配置commit强制码提交规范配置 commitlint
  • React+Antd+tree实现树多选功能(选中项受控+支持模糊检索)
  • c++之说_10|自定义类型 union 联合体
  • 霍金《时间简史》(A Brief History of Time)学习笔记(第四章)
  • FastAdmin
  • Gateway反向代理配置
  • 浅聊一下redis的雪崩,穿透和击穿
  • 练习题解(关于最小生成树)
  • ASP.NET Core 预防开放式重定向攻击
  • 网易和腾讯面试题精选---性能和优化面试问题
  • MySQL 表的增删查改(练习)
  • 百家cms代审
  • [译]如何构建服务器端web组件,为何要构建?
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 10个最佳ES6特性 ES7与ES8的特性
  • CentOS7简单部署NFS
  • docker python 配置
  • Javascript Math对象和Date对象常用方法详解
  • JS变量作用域
  • LeetCode算法系列_0891_子序列宽度之和
  • mysql 5.6 原生Online DDL解析
  • Objective-C 中关联引用的概念
  • Python实现BT种子转化为磁力链接【实战】
  • React-flux杂记
  • Redis中的lru算法实现
  • TCP拥塞控制
  • Vue 2.3、2.4 知识点小结
  • 对象管理器(defineProperty)学习笔记
  • 后端_ThinkPHP5
  • 基于游标的分页接口实现
  • 解决iview多表头动态更改列元素发生的错误
  • 模型微调
  • 前端面试总结(at, md)
  • 如何胜任知名企业的商业数据分析师?
  • 如何选择开源的机器学习框架?
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 正则学习笔记
  • 1.Ext JS 建立web开发工程
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • (4) PIVOT 和 UPIVOT 的使用
  • (ibm)Java 语言的 XPath API
  • (k8s中)docker netty OOM问题记录
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (四)linux文件内容查看
  • (一)插入排序
  • (转)Scala的“=”符号简介
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 分布式技术比较