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 上有很多新的修订。安装新版本解决了这个问题。
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
上测试过
干杯!
我正在 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 上有很多新的修订。安装新版本解决了这个问题。
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
上测试过干杯!