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();
}
相关推荐
qq_401700413 分钟前
TCP 长连接、心跳包与断线自动重连设计:工业级通信的“不死鸟”架构
网络·qt·tcp/ip
czq_26867194878 分钟前
Python打卡第45天
开发语言·python
宇卿.10 分钟前
C#委托详解
开发语言·c#
ZoeLandia14 分钟前
React04:事件处理与受控表单
开发语言·前端·react.js·typescript
熊猫钓鱼>_>15 分钟前
端侧高斯泼溅(3DGS)渲染与性能调优初探:把“实景重建“跑在手机上【鸿蒙心迹】
开发语言·3d·华为·智能手机·harmonyos
量化炼金 (CodeAlchemy)22 分钟前
【Python】pandas vs polars 简单性能对比测试
开发语言·python·pandas
苦瓜汤补钙22 分钟前
Matlab 2022b(中文)的使用教程——Win11
开发语言·matlab
Ai-_Man22 分钟前
我需要批量导出Poe左边栏所有对话,而不是一条具体的对话内容,你们AI导出鸭可以吗?
开发语言·前端·javascript·人工智能·小程序
福大大架构师每日一题25 分钟前
rust 1.99.1 正式更新:聚焦 UEFI、嵌入式、x86_64 FFI 与 macOS 链接体验的三项修复
开发语言·macos·rust
Pin_Qing29 分钟前
缓存能活多久,现在是个要算的参数
java·大数据·开发语言·人工智能·程序人生