概述
简介
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之程序启动界面所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复