qt实现加载中动画效果


php-feng
feng 2023-03-10 14:58:47 63839
分类专栏: 资讯

实现方法大致为3种:

1.是利用QPainter绘制自定义的动画控件。

是利用QPainter类来绘制自定义的加载中动画控件。QPainter类可以在QWidget或者其他绘图设备上进行低级别的绘图操作,比如画线、画圆、画文字等。

你需要先创建一个自定义的QWidget子类,并重写其paintEvent()方法,在里面使用QPainter对象来绘制你想要的动画效果,然后使用QTimer对象来定时更新界面,实现动画的播放。

示例代码

#include <QWidget>
#include <QPainter>
#include <QTimer>

class LoadingWidget : public QWidget
{
    Q_OBJECT

public:
    LoadingWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        // 设置窗口大小和背景颜色
        setFixedSize(200, 200);
        setStyleSheet("background-color: white;");

        // 创建一个定时器,每隔50毫秒触发一次timeout()信号
        QTimer *timer = new QTimer(this);
        timer->setInterval(50);

        // 连接timeout()信号和update()槽函数,用于更新界面
        connect(timer, &QTimer::timeout, this, QOverload<>::of(&QWidget::update));

        // 启动定时器
        timer->start();
    }

protected:
    void paintEvent(QPaintEvent *event) override
    {
        // 创建一个QPainter对象,指定当前窗口为绘图设备
        QPainter painter(this);

        // 设置画笔颜色和宽度
        painter.setPen(QPen(Qt::blue, 10));

        // 获取当前窗口的宽度和高度
        int width = this->width();
        int height = this->height();

        // 计算圆心坐标和半径
        int centerX = width / 2;
        int centerY = height / 2;
        int radius = qMin(width, height) / 4;

        // 根据当前时间计算旋转角度(每秒旋转360度)
        QTime time = QTime::currentTime();
        int angle = time.msecsSinceStartOfDay() % 1000 * 360 / 1000;

        // 将坐标系原点移动到圆心,并旋转相应角度
        painter.translate(centerX, centerY);
        painter.rotate(angle);

         // 绘制一个圆弧,起始角度为0度,跨越角度为270度(顺时针方向)
         painter.drawArc(-radius, -radius, radius * 2, radius * 2, 0 * 16, -270 * 16);
    }
};

 

2.是利用QPropertyAnimation设置控件的属性变化。

第二种方法是利用QML语言来显示GIF动画。QML是一种声明式的语言,用于创建动态的用户界面。在QML中,有一个专门的控件显示GIF,即AnimatedImage

你只需要在QML文件中添加一个AnimatedImage元素,并指定其source属性为GIF文件的路径,就可以显示GIF动画了

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360

    AnimatedImage {
        id: gif
        source: "qrc:/shapes.gif" // GIF文件的路径
        anchors.centerIn: parent
    }
}

3.是利用QMovie加载GIF图片。

第三种方法是利用QMovie类来加载GIF图片。QMovie类可以显示没有声音的简单动画,主要支持GIF和MNG格式的文件。

你需要先创建一个QMovie对象,并为其指定要播放的动画文件,然后将QMovie对象与一个QLabel或者一个QGraphicsMovieItem关联起来,最后调用start()方法开始播放动画

示例代码如下:

#include <QApplication>
#include <QLabel>
#include <QMovie>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建一个QMovie对象,指定要播放的GIF文件
    QMovie *movie = new QMovie("loading.gif");

    // 创建一个QLabel对象,设置其大小和位置
    QLabel *label = new QLabel();
    label->setGeometry(100, 100, 200, 200);

    // 将QMovie对象与QLabel对象关联起来
    label->setMovie(movie);

    // 开始播放动画
    movie->start();

    // 显示QLabel对象
    label->show();

    return app.exec();
}

 

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=20115
赞同 2
评论 0 条
fengL1
粉丝 4 发表 61 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1323
银河麒麟打印带有图像的文档时出错  1236
银河麒麟添加打印机时,出现“server-error-internal-error”  1023
统信桌面专业版【如何查询系统安装时间】  951
统信操作系统各版本介绍  944
统信桌面专业版【全盘安装UOS系统】介绍  903
麒麟系统也能完整体验微信啦!  889
统信【启动盘制作工具】使用介绍  499
统信桌面专业版【一个U盘做多个系统启动盘】的方法  441
信刻全自动档案蓝光光盘检测一体机  386
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!