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

时间:2017-02-20 20:26:13

标签: c++ qt qlist

我在Qt 5.5上开发了一个简单的应用程序。由于Qt 5.5没有QChart类功能,我必须在5.8发行版上安装和构建我的Qt 5.5项目。对于我的项目,我使用名为QXlsx的第三方软件来创建和编辑Excel电子表格。这个库在Qt 5.5中运行良好,但无法在Qt 5.8版本上编译。编译返回以下错误;

  

/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(); ^   我不确定这意味着什么,但我相信我不必对此库的源代码进行任何更改,因为它之前在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> 添加到源代码中 {{ 1}} 是通过指定标题引用的,但这不能解决问题 当我添加 QList时, 会弹出新的无数错误。我该如何构建这个项目?

2 个答案:

答案 0 :(得分:1)

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

上测试过

干杯!

答案 1 :(得分:0)

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

New version
Old version