【问题标题】:Add library into cascades将库添加到级联中
【发布时间】:2012-11-14 04:56:24
【问题描述】:

您好,我正在开发一个在 blackberry10 中解压缩文件的应用程序。对于解压缩文件,我使用从 github 获得的 quazip 库代码。但我不知道如何将此库添加到我的项目中,谁能告诉我如何将库添加到黑莓级联。

【问题讨论】:

    标签: blackberry-10


    【解决方案1】:

    要在 Momentics 中将库添加到您的 BlackBerry 10 项目,您只需右键单击该项目并转到配置->添加库...

    这将启动添加库向导,您可以在其中指定库的路径。请记住更新您的.pro 文件。执行此操作的说明在向导中。如果您要动态链接它,您还需要更新您的bar-descriptor.xml,以便将该库作为资产打包在您的 BAR 文件中。

    【讨论】:

      【解决方案2】:

      我有在我的项目中使用 quazip 库的成功经验。为了让它在您的应用中运行,您需要遵循以下步骤:

      1.QuaZip home page下载一份zip压缩包

      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
      

      3. 创建一个用于处理档案的实用程序类:

      头文件:

      #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)
      };
      

      源文件:

      #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.然后像这样在你的项目中使用它:

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

      【讨论】:

        猜你喜欢
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        相关资源
        最近更新 更多