Add library into cascades

房东的猫 提交于 2019-12-24 01:28:24

问题


Hi I am developing an application to unzip files in blackberry10. For unzipping files I am using quazip library code I get from github. But I dont know how to add this library to my project can anybody please let me know how to add library to blackbery cascades.


回答1:


To add a library to your BlackBerry 10 project in Momentics you just need to right click on the project and go to Configure->Add Library...

This will start the Add Library wizard where you can specify the path to your library. Just remember to update your .pro file. Instructions for doing this are in the wizard. If you're dynamically linking it you'll also need to update your bar-descriptor.xml so that the library is packaged in your BAR file as an asset.




回答2:


I have successful experience in using quazip library in my project. Here are the steps you need to follow in order to get it working in your app:

1. Download a copy of zip archive from QuaZip home page

2. Copy the following files across into your project source folder:

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. Create an utility class for handling archives:

Header file:

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

Source file:

#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. Then use it in your project like that:

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


来源:https://stackoverflow.com/questions/13373269/add-library-into-cascades

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!