最近研究了下Qt下面的解压缩开源项目-quazip,其实它主要是基于zlib这个第三方库和qt框架写出来的开源项目,该项目源码可以去谷歌搜
看到quazip项目只支持qt4.x?但是看到qt国外论坛有人在qt5.x也使用成功过,我特意研究下了mac下面编译,但是发现好多问题,第一个要把系统自带的zlib库加入进来 LIBS += -lz
这样才勉强编译通过,但是如何将其加入到自己的项目中,mac下面着实比较头疼,不知道为什么有时候有的开源项目是可以,有的就老是编译出错
最后我只得将其源码一并加入到我的项目中,才肯罢休,其功能可以将多个文件压缩成一个文件
- void MainWindow::on_pushButton_2_clicked()
{
QStringList wrapper ;
wrapper = chooseList;
// wrapper.append(QString();
QString zipLocation = QCoreApplication::applicationDirPath()+"/"+QDateTime::currentDateTime().toString("yyyyMMddhhmmss")+".zip";
QuaZip zip(zipLocation);
zip.setFileNameCodec("UTF-8");
if(!zip.open(QuaZip::mdCreate)){
qDebug() << "error .... 1";
ui->label->setText("error");
ui->pushButton_3->setVisible(false);
}
QuaZipFile outFile(&zip);
for(int i = 0 ; i < wrapper.size() ; i++){
QFileInfo file(wrapper.at(i));
if(file.exists()){
QFile inFile ;
QFile inFileTemp ;
inFileTemp.setFileName(file.fileName());
inFile.setFileName(file.filePath());
if(!inFile.open(QIODevice::ReadOnly)){
qDebug() << "error ....2";
ui->label->setText("error2");
ui->pushButton_3->setVisible(false);
qDebug() << inFile.errorString().toLocal8Bit().constData();
}
if(!outFile.open(QIODevice::WriteOnly , QuaZipNewInfo(inFileTemp.fileName() , inFile.fileName()))){
qDebug() << "error ...3";
ui->label->setText("error3");
ui->pushButton_3->setVisible(false);
}
outFile.write(inFile.readAll());
if(outFile.getZipError() != UNZ_OK){
qDebug() << "error ...4";
ui->label->setText("error4");
ui->pushButton_3->setVisible(false);
}
outFile.close();
if(outFile.getZipError() != UNZ_OK){
qDebug() << "error ....5";
ui->label->setText("error5");
ui->pushButton_3->setVisible(false);
}
inFile.close();
}
}
zip.close();
if(zip.getZipError()){
qDebug() << "error ...6";
ui->label->setText("error6");
ui->pushButton_3->setVisible(false);
}
ui->label->setText(zipLocation);
ui->label->adjustSize();
ui->pushButton_3->setVisible(true);
}
主要是使用
QStringList fileName = QFileDialog::getOpenFileNames选择多张图片不过如果文件较大,可能耗时比较长,还有这个写法只针对小文件操作,大文件需要另外处理