[问题] QMovie 不吃 QZipReader 的fileData

楼主: liu2007 (è–¯)   2021-02-25 01:43:01
我的开发平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
我采用内建的 QZipReader (#include "private/qzipreader_p.h")
来读取zip压缩档内的单一档案,然后显示
当读取压缩档内的bmp, png, jpg时
我用QImage来读取图片可成功读取
mPath = "F:/image/myzip.zip";
path = "myzip.zip/01.jpg";
mZipReader = new QZipReader(mPath);
QByteArray data{mZipReader->fileData(path)};
bool isSuccessed = image.loadFromData(data,"JPG");
但是如果要读取的档案是GIF档
则无论用QImageReader 或是 QMovie 都无法成功读取
mPath = "F:/image/myzip.zip";
path = "myzip.zip/1445806472.gif";
mZipReader = new QZipReader(mPath);
QByteArray data{mZipReader->fileData(path)};
QMovie *movie = new QMovie(data, "GIF");
qDebug() << movie->isValid(); //false
qDebug() << movie->lastErrorString(); //"File not found"
qDebug() << movie->fileName(); // "GIF89a\u0016\u0002B\u0001?"
想请问除了换用其他的lib之外,还有其他读取压缩档内gif可行的办法吗?
感谢阅读
作者: john790710 (虎)   2021-02-25 09:40:00
QMovie是要给IODevicehttps://imgur.com/J6piuqu
作者: nh60211as   2021-02-25 10:08:00
还有你的path是不是错了,我用Qt 5.15.1要打"01.jpg"才能读档,不是"myzip.zip/01.jpg",不过有可能是行为变更
作者: pinefruit (莫使惹尘埃)   2021-02-25 16:24:00
看了你的程式码,问题出在 QByteArray 和 QBuffer 物件都是区域变量,当建构式一结束这两个物件就销毁了。所以 movie->start() 才会 crash。在 movie 播放 GIF 期间,这两个物件都必须活着才行。

Links booklink

Contact Us: admin [ a t ] ucptt.com