坚持QtQML,坚持移动互联网

http://www.qtcn.org/bbs/u/121778  [收藏] [复制]

toby520

将QtCoding进行到底,做Qt的宠儿

  • 89

    关注

  • 164

    粉丝

  • 3579

    访客

  • 等级:精灵王
  • 身份:论坛版主
  • 总积分:1262
  • 男,1986-11-17

最后登录:2024-05-03

更多资料

日志

基于Qt的QuaZip开源解压缩项目

2014-07-23 14:43
最近研究了下Qt下面的解压缩开源项目-quazip,其实它主要是基于zlib这个第三方库和qt框架写出来的开源项目,该项目源码可以去谷歌搜
看到quazip项目只支持qt4.x?但是看到qt国外论坛有人在qt5.x也使用成功过,我特意研究下了mac下面编译,但是发现好多问题,第一个要把系统自带的zlib库加入进来 LIBS += -lz
这样才勉强编译通过,但是如何将其加入到自己的项目中,mac下面着实比较头疼,不知道为什么有时候有的开源项目是可以,有的就老是编译出错
最后我只得将其源码一并加入到我的项目中,才肯罢休,其功能可以将多个文件压缩成一个文件
  1. 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选择多张图片
不过如果文件较大,可能耗时比较长,还有这个写法只针对小文件操作,大文件需要另外处理
分类:默认分类|回复:1|浏览:2041|全站可见|转载
 
 
删除

yanwuyue:Qt5没问题,win32编译成功

2014-09-12 10:18 -

Powered by phpwind v8.7 Certificate Copyright Time now is:05-04 15:58
©2005-2016 QTCN开发网 版权所有 Gzip disabled