我是靠谱客的博主 壮观白猫,最近开发中收集的这篇文章主要介绍Qt之程序启动界面,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介

Qt本身提供了一个用来做程序启动界面的类QSplashScreen,在实际使用中发现使用这个类做静态的程序启动界面时没有问题,但用来做动态的程序启动界面时就会出现问题了,即使是播放一个gif动画也会存在不完美的地方。
例如想要使用QSplashScreen播放gif图片做启动界面时,可能会写这样一段代码:

 QPixmap pix("1.gif");
 QSplashScreen splash;
 splash.setPixmap(pix);
 QLabel label(&splash);
 QMovie move("1.gif");
 label.setMovie(&move);
 move.start();
 splash.show();
 a.processEvents();
 
 MainWinodw w;
 w.show();
 
splash.finish(&w);

运行上面代码代码时就会发现动画并没有播放,而是向静态图片一样卡在了第一帧,于是又在网上百度,Google一翻,就可能把代码改成如下形式:

 QPixmap pix("1.gif");
 QSplashScreen splash;
 splash.setPixmap(pix);
 QLabel label(&splash);
 QMovie move("1.gif");
 label.setMovie(&move);
 move.start();
 splash.show();
 //注意播放速度与睡眠时间匹配
 for(int i=0;i<1000;i+=movie.speed())
 {
 	 a.processEvents();
 	 Sleep(movie.speed() / 100);
 }

 
 MainWinodw w;
 w.show();
 
splash.finish(&w);

在运行发现动画播放起来了,但又发现程序启动并没有在后台进行,而是动画播放完成后才开始启动主程序,那使用QSplashScreen完成启动界面播放动画或者一组图片就没有办法了啊(PS:可能是我比较菜不知道,大神勿喷)。
于是就想到用QProcess启动一个外部程序来做程序启动界面,等程序启动完成后关掉外部程序就可以了。

效果

1.播放多张png图片
在这里插入图片描述
2.播放GIF动画
在这里插入图片描述
3.静态启动界面
在这里插入图片描述

实现

其实很简单就是写了一个程序,然后用一个Label显示图片或者播放gif动画就行了。我将测试程序及源程序及打包好的程序放在文末,感兴趣的下载看看吧。

void MainWindow::initWindow()
{
    QFileInfo info(m_path);
    if(info.isDir())
    {//如果传入是一个目录
        m_timer = new QTimer(this);
        connect(m_timer,&QTimer::timeout,[this](){
            if(m_currindex == m_files.length())
            {
                m_timer->stop();
                this->close();
            }
            else
            {
                QPixmap pix(m_path + "/" + m_files.at(m_currindex++));
                pix = pix.scaled(ui->label->size(), Qt::KeepAspectRatio);
                ui->label->setPixmap(pix);
            }
        });

        QDir dir(m_path);
        m_files = dir.entryList(QDir::NoDotAndDotDot | QDir::Files);
        if(!m_files.isEmpty())
        {
            QPixmap pix(m_path + "/" + m_files.at(m_currindex++));
            pix = pix.scaled(ui->label->size(), Qt::KeepAspectRatio);
            ui->label->setPixmap(pix);
            m_timer->start(m_ms);
        }
        else
        {
            this->close();
        }
    }
    else if(m_path.endsWith(".gif"))
    {

        m_move = new QMovie(m_path);
        ui->label->setMovie(m_move);
        m_move->start();
    }
    else
    {
        QPixmap pix(m_path);
        pix = pix.scaled(ui->label->size(), Qt::KeepAspectRatio);
        ui->label->setPixmap(pix);
    }

}

源文件链接

最后

以上就是壮观白猫为你收集整理的Qt之程序启动界面的全部内容,希望文章能够帮你解决Qt之程序启动界面所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(25)

评论列表共有 0 条评论

立即
投稿
返回
顶部