• Qt 在程序启动的时候用多线程实现播放gif动画


            项目组的程序是一个3D的虚拟航海,由于模型很大,所以在每次载入的时候都会等待很长的时间,每次都只能死等,还会以为程序死掉,用户友好度不高,所以想在载入的时候播放一个gif图做为载入画面,当然这个gif图没有记录载入进度的功能。。。

            在网上搜了相关资料,发现只有关于怎样播放gif的文章,最有用的只有讨论到说“当程序启动的时候线程正在执行一些初始化操作,无法处理QMovie的events,所以只会显示第一帧的画面,解决方法是适当的调用qApp->processEvents();可以处理事件”。
            但是如果不用多线程,执行到
            DKOcean* w = new DKOcean();
    w->Create(1024,768,shipNumber);//创建3D场景模型
            create的时候程序gif图还是会卡住。
            所以我觉得尝试一下多线程来处理gif图的播放(怎样播放gif图已经有人讨论过了,这里就不说明)~下面贴出代码:
            首先是gifThread.h:
    #ifndef GIFTHREAD_H
    #define GIFTHREAD_H
     
    #include <QThread>
    class Thread : public QThread
    {
    Q_OBJECT
     
    public:
    Thread();
     
    void stop();//当主程序载入成功后调用,结束线程
     
    protected:
    void run();
     
    private:
    volatile bool stopped;
    };
     
    #endif
     
        然后是gifThread.cpp:
     
    #include <QtCore>
    #include <iostream>
    #include "gifThread.h"
    #include <QMovie>
    #include <QLabel>
    //#include <QtGui/QMainWindow>
    Thread::Thread()
    {
    stopped = false;//初始化为false ,可以执行qApp->processEvents();播放gif图
    }
     
     
    void Thread::run()
    {
    QMovie *movie;
    movie=new QMovie("Resources/Gui/loading.gif");
    QLabel *label=new QLabel ("", 0);         //初始化qlabel;
    label->setGeometry( 300, 300, 493, 150 ); 
    label->setMovie(movie);
    label->setScaledContents(true);
    movie->start();
    label->show();
    while(!stopped)
      qApp->processEvents();
    label->close();
    }
    void Thread::stop()
    {
    stopped = true;
    }
            最后是在主程序里面,按钮按下触发载入事件,gui.cpp:
     
    void GUI::on_pushButton_excute_clicked()
    {
        QApplication::addLibraryPath("./plugins");
        this->close();//关闭当前窗口
        threadA.start();    //Thread threadA;
        DKOcean* w = new DKOcean();
        w->Create(1024,768,shipNumber);
        w->show();
        threadA.stop();
    }
     
            最后还有个小问题是载入的时候关闭label不会退出程序,这个有待解决,还望高手指点。
            这是我第一次写博客,有点小激动,写的可能会有问题,还请各位指出和包含~~
  • 相关阅读:
    微信小程序的scheme码
    微信小程序的简单总结(uni-app)
    ES7-ES11新特性
    Promise 总结
    uni-app创建项目及使用 vant-weapp
    vscode 插件整理
    el-upload 组件总结
    从输入URL到页面显示过程中发生了什么
    实验 1:Mininet 源码安装和可视化拓扑工具
    2020软件工程第一次作业
  • 原文地址:https://www.cnblogs.com/tlsdba/p/2565559.html
Copyright © 2020-2023  润新知