2017-02-20 141 views
0

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

/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>的源代码,因为QList与指定标题引用,但这并不解决问题当我添加#include <QList>,一个新的无数的错误弹出。我怎样才能建立这个项目?

回答

0

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

New version
Old version

1

为QtXLSX错误没有得到解决。

解决方案很简单。

在文件xlsxzipreader.cpp,它是necesary包括:

#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

干杯!