Qt 5.8 中的 Qt 5.5 项目构建错误

Qt 5.5 project build error in Qt 5.8

我正在 Qt 5.5 上开发一个简单的应用程序。由于 Qt 5.5 没有 QChart class features, I had to install and build my Qt 5.5 project on the 5.8 distribution. For my project I am using this 3rd party software called the QXlsx 来创建和编辑 Excel 电子表格。该库在 Qt 5.5 中运行完美,但无法在 Qt 5.8 版本上编译。编译returns出现如下错误;

/Users/Vino/Documents/My Stuff/Qt Projects/Fundemental Analysis/FundementalAnalysis/3rdparty/qtxlsx/src/xlsx/xlsxzipreader.cpp:52: error: implicit instantiation of undefined template 'QVector<QZipReader::FileInfo>' QList<QZipReader::FileInfo> allFiles = m_reader->fileInfoList(); ^ I am not sure what it means, but I am quite confident that I don't have to make any changes on the source code of this library since it worked previously on Qt 5.5.

总之这是错误发生的源代码

#include "xlsxzipreader_p.h"
#include <private/qzipreader_p.h>



namespace QXlsx {

    ZipReader::ZipReader(const QString &filePath) :
    m_reader(new QZipReader(filePath))
    {
         init();
    }

    ZipReader::ZipReader(QIODevice *device) :
    m_reader(new QZipReader(device))
    {
         init();
    }

    ZipReader::~ZipReader()
    {

    }

    void ZipReader::init()
    {
           QList<QZipReader::FileInfo> allFiles = m_reader->fileInfoList();
           foreach (const QZipReader::FileInfo &fi, allFiles) {
           if (fi.isFile)
                 m_filePaths.append(fi.filePath);
    }
}

     bool ZipReader::exists() const
     {
           return m_reader->exists();
     }

    QStringList ZipReader::filePaths() const
    {
       return m_filePaths;
    }

    QByteArray ZipReader::fileData(const QString &fileName) const
    {
         return m_reader->fileData(fileName);
    }
}// namespace Xlsx

这个函数出现错误;

    void ZipReader::init()
    {
         QList<QZipReader::FileInfo> allFiles = m_reader->fileInfoList();
         foreach (const QZipReader::FileInfo &fi, allFiles) 
         {
              if (fi.isFile)
              m_filePaths.append(fi.filePath);
         }
    }

所以作为解决方案我尝试添加#include <QList>到源代码因为 QList 被引用并指定 header 但这不能解决问题当我添加 #include <QList>时,弹出了无数新错误。我如何构建这个项目?

所以我解决了我的问题;我使用的是最旧版本的 QXlsx,根据这个 post,gitHub 上有很多新的修订。安装新版本解决了这个问题。

New version
Old version

QtXLSX 的错误尚未解决。

解决方法很简单。

在文件xlsxzipreader.cpp中,需要包含:

#include <QVector>

在函数:void ZipReader::init(){}之后,我们需要更新类型:

void ZipReader::init(){
// This was the previous definition
//QList<QZipReader::FileInfo> allFiles = m_reader->fileInfoList();

QVector<QZipReader::FileInfo> allFiles = m_reader->fileInfoList();

foreach (const QZipReader::FileInfo &fi, allFiles) {
    if (fi.isFile)
        m_filePaths.append(fi.filePath);
    }
}

只需保存并重做:

make
make install

这已经在 Qt 5.8.x, 5.9.x

上测试过

干杯!