想知道一下QMovie调用start后,gif图片显示的过程及原理, 因为在QMovie实例化后,调用start播放gif图片,之后通过延时函数,让gif图片播放3s,再切换播放其他图片, 结果gif图片播放出来是静止的画面,感觉应该是start的实现原理不够理解,或者是延时函数的问题 下面是我的代码, void MainWindow::picture_path(const QString &path)//path为放置gif图片及jpg图片的文件夹路径
{
QDir dir(path);//实例化QDir
if (!dir.exists())//判断改路径是否存在
{
qDebug()<<false;
}
dir.setFilter(QDir::Files | QDir::NoSymLinks);//
dir.setSorting(QDir::Name);//设置排序顺序
QFileInfoList list = dir.entryInfoList(QDir::Files|QDir::NoDotAndDotDot);//用list保存文件夹下的图片文件
for (int i = 0; i < list.size(); i++)
{
QFileInfo fileInfo = list.at(i);
QString OpenFileName = fileInfo.fileName();
QString picturepath = fileInfo.path()+"/"+OpenFileName;//获取图片文件的路径
if(OpenFileName.endsWith(".gif"))
{
QMovie *movie = new QMovie(picturepath);
ui->label1->setMovie(movie);
movie->start();
}else{
QPixmap pix(picturepath);
QPixmap dest=pix.scaled(ui->label1->size(),Qt::KeepAspectRatio);
ui->label1->setPixmap(dest);
}
movie_sleep(3000);//自定义的延时函数,不会阻塞进程
}
void MainWindow::movie_sleep(unsigned int msec)
{
QTime _Timer = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < _Timer )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
你movie->start();之后再等待三秒,下一次播放的时候,应该清空label1
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632