将Quazip添加到项目中

add QuaZip to project

本文关键字:项目 添加 Quazip      更新时间:2023-10-16

我正在尝试将Quazip添加到我的项目中,但会得到构建错误,这与不确定的参考有关。这是第一个错误,它们主要与Extractall函数中的存档函数有关。

错误:未定义的引用`_ _ imp ___ zn6quazip13gotofirstfileev'

这是我的.pro文件的添加:

INCLUDEPATH += $$PWD/quazip/
LIBS += -L$$PWD/libs/
INCLUDEPATH += $$PWD/zlib/include/
INCLUDEPATH += $$PWD/zlib/lib/
LIBS += -L$$PWD/zlib/lib/

在Quazip子文件夹中,我都有Quazip的所有标题。在此之后的行中,在Libs文件夹中,我有Quazip的.A。Zilib子文件夹有Zlib开发人员文件。

这是我要使用的功能:

void Utilities::updateFiles_zip()
{
    currentDownloads.clear();
    init_files();
    QString error = "";
    QString file = "LAE-Intnl-numbers-new.zip";
    error = checkForUpdates(file);
    if (error != "")
    {
        errorMessage = error;
        if (DEBUG)
            qDebug() << "error = {" <<  error << "}";       
        return; 
    }
    QString filename = downloadPath + "LAE-Intnl-numbers-new.zip";
    QuaZip *zip_file = new QuaZip(filename);
    extractAll(zip_file, inputPath);
}

void Utilities::extractAll( QuaZip *archive, QString destFileFolder )
{
    // extracts all files from the archive and saves
    // them onto disk
    //
    // just a simple implementation for evaluation.
    // error handling has not been implemented yet!
    for( bool f = archive->goToFirstFile(); f; f = archive->goToNextFile() )
    {
        // set source file in archive
        QString filePath = archive->getCurrentFileName();
        QuaZipFile zFile( archive->getZipName(), filePath );
        // open the source file
        zFile.open( QIODevice::ReadOnly );
        // create a bytes array and write the file data into it
        QByteArray ba = zFile.readAll();
        // close the source file
        zFile.close();
        // set destination file
        QString destFilePath = destFileFolder +  filePath;
        QFile dstFile( destFilePath );
        // open the destination file
        dstFile.open( QIODevice::WriteOnly | QIODevice::Text );
        // write the data from the bytes array into the destination file
        dstFile.write( ba.data() );
        //close the destination file
        dstFile.close();
    }
}

编辑:使它变得完整,但是应用程序现在正在崩溃。

这是我的.pro文件的外观:

#-------------------------------------------------
#
# Project created by QtCreator 2013-04-20T05:16:50
#
#-------------------------------------------------
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Lottery
TEMPLATE = app
INCLUDEPATH += $$PWD/zlib/include
INCLUDEPATH += $$PWD/zlib/lib
LIBS += -L$$PWD/zlib/lib
LIBS += -L$$PWD/libs/ -lquazip
SOURCES += main.cpp 
        mainwindow.cpp 
        Games.cpp 
        Config.cpp 
        ProcessNumbers.cpp 
        SortMethods.cpp 
        Headers.cpp 
        AnalysisMethods.cpp 
        CombosMethods.cpp 
        CheckMatchesMethods.cpp 
        MatchesMethods.cpp 
        RandomMethods.cpp 
        form.cpp 
        Utilities.cpp 
        numbersranksavgsdiffs.cpp 
        MatchesMethods_LM.cpp

HEADERS  += mainwindow.h 
    AnalysisMethods.h 
    Config.h 
    Headers.h 
    ProcessNumbers.h 
    SortMethods.h 
    dates.h 
    sorts.h 
    update.h 
    Games.h 
    CombosMethods.h 
    combos.h 
    gameballs.h 
    comboscheck.h 
    CheckMatchesMethods.h 
    MatchesMethods.h 
    RandomMethods.h 
    checkmatches.h 
    progress.h 
    form2.h 
    matches.h 
    random.h 
    Utilities.h 
    pointers.h 
    diffs.h 
    numbersranksavgsdiffs.h 
    MatchesMethods_LM.h 
    matches_lm.h 
    analysis.h
include(quazip.pri)

FORMS    += 
    mainwindow.ui 
    dates.ui 
    update.ui 
    sorts.ui 
    combos.ui 
    gameballs.ui 
    comboscheck.ui 
    checkmatches.ui 
    form2.ui 
    progress.ui 
    matches.ui 
    random.ui 
    diffs.ui 
    matches_lm.ui 
    analysis.ui
QT += network
QT += core gui widgets
QT += concurrent
#QMAKE_LFLAGS_WINDOWS += -Wl,--stack,32000000
#QMAKE_LFLAGS += /STACK:32000000
#QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
RC_ICONS = currency_blue_dollar.ico

这是我的quazip.pri外观:

#INCLUDEPATH += $$PWD/quazip
#DEPENDPATH += $$PWD/quazip
INCLUDEPATH += $$PWD/quazip/headers

HEADERS += $$PWD/quazip/headers/minizip_crypt.h 
        $$PWD/quazip/headers/ioapi.h 
        $$PWD/quazip/headers/JlCompress.h 
        $$PWD/quazip/headers/quaadler32.h 
        $$PWD/quazip/headers/quachecksum32.h 
        $$PWD/quazip/headers/quacrc32.h 
        $$PWD/quazip/headers/quagzipfile.h 
        $$PWD/quazip/headers/quaziodevice.h 
        $$PWD/quazip/headers/quazipdir.h 
        $$PWD/quazip/headers/quazipfile.h 
        $$PWD/quazip/headers/quazipfileinfo.h 
        $$PWD/quazip/headers/quazip_global.h 
        $$PWD/quazip/headers/quazip.h 
        $$PWD/quazip/headers/quazipnewinfo.h 
        $$PWD/quazip/headers/unzip.h 
        $$PWD/quazip/headers/zip.h
#        $$PWD/zlib/include/zlib.h
#SOURCES += $$PWD/quazip/qioapi.cpp 
#           $$PWD/quazip/JlCompress.cpp 
#           $$PWD/quazip/quaadler32.cpp 
#           $$PWD/quazip/quacrc32.cpp 
#           $$PWD/quazip/quagzipfile.cpp 
#           $$PWD/quazip/quaziodevice.cpp 
#           $$PWD/quazip/quazip.cpp 
#           $$PWD/quazip/quazipdir.cpp 
#           $$PWD/quazip/quazipfile.cpp 
#           $$PWD/quazip/quazipfileinfo.cpp 
#           $$PWD/quazip/quazipnewinfo.cpp 
#           $$PWD/quazip/unzip.c 
#           $$PWD/quazip/zip.c

为什么不将源代码放入您喜欢的任何目录中。例如,3rdparty:

|-- project.pro
|-- ....
|-- 3rdparty
|     |-- QuaZip
|     |

将以下行添加到您的QMAKE项目文件:

include(3rdparty/quazip/blob/master/quazip.pri)

qmake将完成工作