Мне необходимо конвертировать старый код 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/prices/priceGetterTSP.cpp:86:12: ошибка: нет члена с именем addQueryItem в QUrl
params.addQueryItem («fund», ProperCaseSymbol);
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:87:12: ошибка: нет члена с именем addQueryItem в QUrl
params.addQueryItem («frommonth», QString :: number (beginQDate.month ()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:88:12: ошибка: нет элемента с именем addQueryItem в QUrl
params.addQueryItem («fromday», QString :: number (beginQDate.day ()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:89:12: ошибка: нет элемента с именем ‘addQueryItem’ в ‘QUrl’
params.addQueryItem («fromyear», QString :: number (beginQDate.year ()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:90:12: ошибка: нет элемента с именем ‘addQueryItem’ в ‘QUrl’
params.addQueryItem («tomonth», QString :: number (endQDate.month ()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:91:12: ошибка: ни один член с именем addQueryItem в QUrl
params.addQueryItem («сегодня», QString :: number (endQDate.day ()));
~~~~~~ ^
../src/prices/priceGetterTSP.cpp:92:12: ошибка: нет элемента с именем addQueryItem в QUrl
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 < >?
Вместо звонка addQueryItem
на QUrl
объект, вы создаете QUrlQuery
возразить и сделать вызовы на этом.
Затем вы установите готовый запрос на URL
QUrlQuery paramsQuery;
paramsQuery.addQueryItem("fund", properCaseSymbol);
// and so on..
params.setQuery(paramsQuery);
Поскольку вы не используете params
как URL, но так же, как toString
помощник, вы могли бы даже попробовать просто изменить тип
QUrlQuery params;
и держать большую часть кода так, как он есть
Других решений пока нет …