我在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
时, 会弹出新的无数错误。我该如何构建这个项目?
答案 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上有很多新版本。安装新版本解决了这个问题。