首页 > 解决方案 > 使用 QuaZip 提取 .cbz 并在 Qt 中创建 QImages?

问题描述

我目前正在尝试解压缩 .cbz 文件(基本上是 .zip 文件)并将该 .cbz 文件中包含的所有 .png 图像存储到std::vector<QImage>.

我正在使用 QuaZip 来执行此操作。我在网上查看了一些示例,并尝试使用 QuaZip 类文档实现一些不同的方法。

这是我目前拥有的代码:

// Store all files for later access given the CBZ file
bool CbzReader::loadCbzFile(QString cbzFile) {
    QuaZip zip(cbzFile);
    zip.open(QuaZip::mdUnzip);

    const QStringList fileList = zip.getFileNamesList();
    QStringList allFiles = JlCompress::extractFiles(cbzFile, fileList);

    QImage newImage;
    for(int file = 0; file < fileList.size(); file++) {
        QImageReader reader(allFiles[file]);
        newImage = reader.read();

        if(newImage.isNull()) return false;

        imageList.push_back(newImage); //save image to class variable    
    }

    return true;
}

该变量allFiles包含 265 个条目,但是,在 for 循环内部,它正在返回false,正如QtnewImage所说的那样。invalid

我做错了怎么办?我应该在 QuaZip 而不是 JlCompress 中使用不同的功能吗?

标签: c++qtqimagequazip

解决方案


事实证明,提取 .cbz 文件会导致至少一个不是图像文件的文件,并且试图从中制作 QImage,从而导致错误。我没有足够关注解压缩文件的内容。

这现在有效,因为我使用布尔表达式来检查未压缩文件的文件扩展名。

所以是啊,我的坏人。


推荐阅读