'QUrl'中没有名为'addQueryItem'的成员 - 将Qt 4.7转换为5.8

时间:2017-03-10 01:24:39

标签: c++ qt qurl

我需要将Qt遗留代码从4.7转换为5.8 ,我在Qt Creator 4.2.1 Clang 7.0(Apple)64bit中有编译错误。

查看.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/price / 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。 构建/部署项目mypersonalindex时出错(工具包:Desktop Qt 5.8.0 clang 64bit)

好......那么替代品是什么?

缺少什么#include&lt; &GT;

1 个答案:

答案 0 :(得分:0)

不是在addQueryItem对象上调用QUrl,而是创建一个QUrlQuery对象并对其进行调用。 然后在URL上设置完成的查询

QUrlQuery paramsQuery;
paramsQuery.addQueryItem("fund", properCaseSymbol);
// and so on..

params.setQuery(paramsQuery);

由于您没有使用params作为网址,而只使用toString帮助,您甚至可以尝试更改类型

QUrlQuery params;

并保持大部分代码