2012-11-14 34 views
2

嗨我正在開發一個應用程序來解壓黑莓10文件。爲了解壓縮文件,我使用了從github獲得的quazip庫代碼。但我不知道如何將這個庫添加到我的項目中,任何人都可以請讓我知道如何將庫添加到blackbery級聯。添加庫到瀑布

回答

2

要將庫添加到您的Momentics的黑莓10項目,您只需要右鍵單擊該項目並轉到配置 - >添加庫...

這將啓動添加庫嚮導,您可以指定您的圖書館的路徑。只記得更新你的.pro文件。這樣做的說明在嚮導中。如果您動態鏈接它,則還需要更新bar-descriptor.xml,以便將該庫作爲資產打包在BAR文件中。

-1

我在我的項目中使用quazip庫的成功經驗。下面是你需要爲了遵循得到它在你的應用程序的工作步驟:

下載ZIP檔案的副本從QuaZip home page

2.複製遇到下列文件到您的項目源文件夾:

qioapi.cpp 
quazip.cpp 
quazipfile.cpp 
quazipnewinfo.cpp 
unzip.c 
zip.c 
crypt.h 
ioapi.h 
quazipdir.h 
quazipfile.h 
quazipfileinfo.h 
quazip_global.h 
quazip.h 
quazipnewinfo.h 
unzip.h 
zip.h 

處理檔案創建一個實用工具類:

頭文件:

#ifndef ZIPPER_H_ 
#define ZIPPER_H_ 

#include <QObject> 
#include <QDir> 

#include "quazip.h" 
#include "quazipfile.h" 

class Zipper : public QObject { 
     Q_OBJECT 

public: 
     Zipper() {} 
     virtual ~Zipper() {} 

     static bool extract(const QString & filePath, const QString & extDirPath, const QString & singleFileName = QString("")); 
     static bool archive(const QString & filePath, const QDir & dir, const QString & comment = QString("")); 

     Q_DISABLE_COPY(Zipper) 
}; 

源文件:

bool rc = Zipper::extract(filePath, pathToUnpack); 
qDebug("extracting %s", rc ? "success" : "failure"); 

#include <QFile> 
#include <QDir> 
#include "Zipper.h" 

bool Zipper::extract(const QString & filePath, const QString & extDirPath, const QString & singleFileName) { 
     QuaZip zip(filePath); 

     if (!zip.open(QuaZip::mdUnzip)) { 
      qWarning("testRead(): zip.open(): %d", zip.getZipError()); 
      return false; 
     } 

     zip.setFileNameCodec("IBM866"); 

     qWarning("%d entries\n", zip.getEntriesCount()); 
     qWarning("Global comment: %s\n", zip.getComment().toLocal8Bit().constData()); 

     QuaZipFileInfo info; 

     QuaZipFile file(&zip); 

     QFile out; 
     QString name; 
     char c; 
     for (bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) { 

      if (!zip.getCurrentFileInfo(&info)) { 
       qWarning("testRead(): getCurrentFileInfo(): %d\n", zip.getZipError()); 
       return false; 
      } 

      if (!singleFileName.isEmpty()) 
       if (!info.name.contains(singleFileName)) 
        continue; 

      if (!file.open(QIODevice::ReadOnly)) { 
       qWarning("testRead(): file.open(): %d", file.getZipError()); 
       return false; 
      } 

      name = QString("%1/%2").arg(extDirPath).arg(file.getActualFileName()); 

      if (file.getZipError() != UNZ_OK) { 
       qWarning("testRead(): file.getFileName(): %d", file.getZipError()); 
       return false; 
      } 

      //out.setFileName("out/" + name); 
      qWarning ("using %s for output fileName", qPrintable(name)); 
      out.setFileName(name); 

      // this will fail if "name" contains subdirectories, but we don't mind that 
      out.open(QIODevice::WriteOnly); 
      // Slow like hell (on GNU/Linux at least), but it is not my fault. 
      // Not ZIP/UNZIP package's fault either. 
      // The slowest thing here is out.putChar(c). 
      while (file.getChar(&c)) out.putChar(c); 

      out.close(); 

      if (file.getZipError() != UNZ_OK) { 
       qWarning("testRead(): file.getFileName(): %d", file.getZipError()); 
       return false; 
      } 

      if (!file.atEnd()) { 
       qWarning("testRead(): read all but not EOF"); 
       return false; 
      } 

      file.close(); 

      if (file.getZipError() != UNZ_OK) { 
       qWarning("testRead(): file.close(): %d", file.getZipError()); 
       return false; 
      } 
     } 

     zip.close(); 

     if (zip.getZipError() != UNZ_OK) { 
      qWarning("testRead(): zip.close(): %d", zip.getZipError()); 
      return false; 
     } 

     return true; 
} 


bool Zipper::archive(const QString & filePath, const QDir & dir, const QString & comment) { 

     QuaZip zip(filePath); 
     zip.setFileNameCodec("IBM866"); 

     if (!zip.open(QuaZip::mdCreate)) { 
      qDebug("testCreate(): zip.open(): %d", zip.getZipError()); 
      return false; 
     } 

     if (!dir.exists()) { 
      qDebug("dir.exists(%s)=FALSE", qPrintable(dir.absolutePath())); 
      return false; 
     } 

     QFile inFile; 

     QStringList sl; 
     // what's this ?? 
//  recurseAddDir(dir, sl); 

     QFileInfoList files; 
     foreach (QString fn, sl) files << QFileInfo(fn); 

     QuaZipFile outFile(&zip); 

     char c; 
     foreach(QFileInfo fileInfo, files) { 

      if (!fileInfo.isFile()) 
       continue; 

      QString fileNameWithRelativePath = fileInfo.filePath().remove(0, dir.absolutePath().length() + 1); 

      inFile.setFileName(fileInfo.filePath()); 

      if (!inFile.open(QIODevice::ReadOnly)) { 
       qDebug("testCreate(): inFile.open(): %s", qPrintable(inFile.errorString())); 
       return false; 
      } 

      if (!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(fileNameWithRelativePath, fileInfo.filePath()))) { 
       qDebug("testCreate(): outFile.open(): %s", qPrintable(outFile.getZipError())); 
       return false; 
      } 

      while (inFile.getChar(&c) && outFile.putChar(c)); 

      if (outFile.getZipError() != UNZ_OK) { 
       qDebug("testCreate(): outFile.putChar(): %d", outFile.getZipError()); 
       return false; 
      } 

      outFile.close(); 

      if (outFile.getZipError() != UNZ_OK) { 
       qDebug("testCreate(): outFile.close(): %d", outFile.getZipError()); 
       return false; 
      } 

      inFile.close(); 
     } 

     if (!comment.isEmpty()) 
      zip.setComment(comment); 

     zip.close(); 

     if (zip.getZipError() != 0) { 
       qDebug("testCreate(): zip.close(): %d", zip.getZipError()); 
      return false; 
     } 

     return true; 
} 

4.然後在你的項目中喜歡使用它