'QUrl' 中没有名为 'addQueryItem' 的成员 - 将 Qt 4.7 转换为 5.8
No member named 'addQueryItem' in 'QUrl' - Convert Qt 4.7 to 5.8
我需要将 Qt 遗留代码从 4.7 转换为 5.8,我在 Qt Creator 4.2.1 Clang 7.0(Apple) 64 位中遇到编译错误。
正在.cpp 文件中查找
QList<QByteArray> priceGetterTSP::downloadFile(const QString &symbol_, int beginDate_, int endDate_)
{
QNetworkAccessManager manager;
QEventLoop loop;
QNetworkRequest request(QUrl("http://www.fedsmith.com/tsp/csv.dailyfund.db.php"));
QByteArray data;
QUrl params;
QDate beginQDate = QDate::fromJulianDay(beginDate_);
QDate endQDate = QDate::fromJulianDay(endDate_);
QString properCaseSymbol = symbol_.left(3).append(symbol_.right(symbol_.length() - 3).toLower());
params.addQueryItem("fund", properCaseSymbol);
params.addQueryItem("frommonth", QString::number(beginQDate.month()));
params.addQueryItem("fromday", QString::number(beginQDate.day()));
params.addQueryItem("fromyear", QString::number(beginQDate.year()));
params.addQueryItem("tomonth", QString::number(endQDate.month()));
params.addQueryItem("today", QString::number(endQDate.day()));
params.addQueryItem("toyear", QString::number(endQDate.year()));
data.append(params.toString());
data.remove(0,1);
QNetworkReply *reply = manager.post(request, data);
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QList<QByteArray> lines;
if (reply->error() == QNetworkReply::NoError)
lines = reply->readAll().split('\n');
delete reply;
return lines;
}
查看 .cpp 的顶部
#include "priceGetterTSP.h"
#include <QString>
#include <QList>
#include <QByteArray>
#include <QUrl>
#include <QDate>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <historicalPrices.h>
.cpp 中的错误
../src/prices/priceGetterTSP.cpp:86:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("fund", properCaseSymbol);
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:87:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("frommonth", QString::number(beginQDate.month()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:88:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("fromday", QString::number(beginQDate.day()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:89:12:错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("fromyear", QString::number(beginQDate.year()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:90:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("tomonth", QString::number(endQDate.month()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:91:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("today", QString::number(endQDate.day()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:92:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员
params.addQueryItem("toyear", QString::number(endQDate.year()));
~~~~~~ ^
产生了 7 个错误。
make: *** [priceGetterTSP.o] 错误 1
16:40:22:进程“/usr/bin/make”已退出,代码为 2。
building/deploying 项目 mypersonalindex 时出错(套件:桌面 Qt 5.8.0 clang 64 位)
好的...那么替代品是什么?
缺少什么 #include < >?
您无需在 QUrl
对象上调用 addQueryItem
,而是创建一个 QUrlQuery
对象并对其进行调用。
然后在 url
上设置完成的查询
QUrlQuery paramsQuery;
paramsQuery.addQueryItem("fund", properCaseSymbol);
// and so on..
params.setQuery(paramsQuery);
由于您没有将 params
用作 URL,而是用作 toString
助手,您甚至可以尝试仅更改类型
QUrlQuery params;
并保持大部分代码原样
我需要将 Qt 遗留代码从 4.7 转换为 5.8,我在 Qt Creator 4.2.1 Clang 7.0(Apple) 64 位中遇到编译错误。
正在.cpp 文件中查找
QList<QByteArray> priceGetterTSP::downloadFile(const QString &symbol_, int beginDate_, int endDate_)
{
QNetworkAccessManager manager;
QEventLoop loop;
QNetworkRequest request(QUrl("http://www.fedsmith.com/tsp/csv.dailyfund.db.php"));
QByteArray data;
QUrl params;
QDate beginQDate = QDate::fromJulianDay(beginDate_);
QDate endQDate = QDate::fromJulianDay(endDate_);
QString properCaseSymbol = symbol_.left(3).append(symbol_.right(symbol_.length() - 3).toLower());
params.addQueryItem("fund", properCaseSymbol);
params.addQueryItem("frommonth", QString::number(beginQDate.month()));
params.addQueryItem("fromday", QString::number(beginQDate.day()));
params.addQueryItem("fromyear", QString::number(beginQDate.year()));
params.addQueryItem("tomonth", QString::number(endQDate.month()));
params.addQueryItem("today", QString::number(endQDate.day()));
params.addQueryItem("toyear", QString::number(endQDate.year()));
data.append(params.toString());
data.remove(0,1);
QNetworkReply *reply = manager.post(request, data);
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QList<QByteArray> lines;
if (reply->error() == QNetworkReply::NoError)
lines = reply->readAll().split('\n');
delete reply;
return lines;
}
查看 .cpp 的顶部
#include "priceGetterTSP.h"
#include <QString>
#include <QList>
#include <QByteArray>
#include <QUrl>
#include <QDate>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <historicalPrices.h>
.cpp 中的错误
../src/prices/priceGetterTSP.cpp:86:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("fund", properCaseSymbol); ~~~~~~ ^ ../src/prices/priceGetterTSP.cpp:87:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("frommonth", QString::number(beginQDate.month())); ~~~~~~ ^ ../src/prices/priceGetterTSP.cpp:88:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("fromday", QString::number(beginQDate.day())); ~~~~~~ ^ ../src/prices/priceGetterTSP.cpp:89:12:错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("fromyear", QString::number(beginQDate.year())); ~~~~~~ ^ ../src/prices/priceGetterTSP.cpp:90:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("tomonth", QString::number(endQDate.month())); ~~~~~~ ^ ../src/prices/priceGetterTSP.cpp:91:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("today", QString::number(endQDate.day())); ~~~~~~ ^ ../src/prices/priceGetterTSP.cpp:92:12: 错误:'QUrl' 中没有名为 'addQueryItem' 的成员 params.addQueryItem("toyear", QString::number(endQDate.year())); ~~~~~~ ^ 产生了 7 个错误。 make: *** [priceGetterTSP.o] 错误 1 16:40:22:进程“/usr/bin/make”已退出,代码为 2。 building/deploying 项目 mypersonalindex 时出错(套件:桌面 Qt 5.8.0 clang 64 位)
好的...那么替代品是什么?
缺少什么 #include < >?
您无需在 QUrl
对象上调用 addQueryItem
,而是创建一个 QUrlQuery
对象并对其进行调用。
然后在 url
QUrlQuery paramsQuery;
paramsQuery.addQueryItem("fund", properCaseSymbol);
// and so on..
params.setQuery(paramsQuery);
由于您没有将 params
用作 URL,而是用作 toString
助手,您甚至可以尝试仅更改类型
QUrlQuery params;
并保持大部分代码原样