2017-03-10 4 views
0

Qt 레거시 코드를 4.7에서 5.8로 변환해야합니다. Qt Creator 4.2.1에서 컴파일 오류가 발생했습니다. Clang 7.0 (Apple) 64bit .'QUrl'에 'addQueryItem'이라는 회원이 없습니다 - Qt 4.7을 5.8로 변환하십시오.

통화 당

../src/prices/에서 통화 당

#include "priceGetterTSP.h" 

#include <QString> 
#include <QList> 
#include <QByteArray> 
#include <QUrl> 
#include <QDate> 
#include <QNetworkAccessManager> 
#include <QNetworkRequest> 
#include <QNetworkReply> 
#include <QEventLoop> 
#include <historicalPrices.h> 

ERROR의 상단을 보면 .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; 
} 

에서 찾고 priceGetterTSP.cpp : 86 : 12 : 오류 : 'QUrl'에 'addQueryItem'이라는 멤버가 없습니다. params.addQueryItem ("fund", properCaseSymbol); ~~~~~~^ ../src/prices/priceGetterTSP.cpp:87:12 : 오류 : 'QUrl' params.addQueryItem ("frommonth", QString에 'addQueryItem'라는 이름의 멤버 :: 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)

OK ... 대체 무엇입니까?

무엇이 빠진 #include <>은 무엇입니까?

+0

새로운 [QUrlQuery] (http://doc.qt.io/qt-5/qurlquery.html) 클래스를 살펴보십시오. – MrEricSir

+0

@MrEricSir 고마워요, ** 내 C++ 스킬이 꽤 제한되어 있습니다. Qt4에서 Qt5 **로 변환 할 수있는 사소한 개조가 있습니까? 나는 QUrlQuery를 사용하기 위해 변경해야 할 배경이 있는지 의심 스럽다. 나는 문서에서 읽었다 : QUrl 클래스의 다음 멤버들은 쓸모가 없다. 오래된 소스 코드를 유지하기 위해 제공됩니다. 새로운 코드에서 사용하는 것을 강력히 권장합니다. 오류가 있습니다 (구식) void \t addQueryItem (const QString & key, const QString & value) – bullflag

답변

0

QUrl 개체에서 addQueryItem을 호출하는 대신 QUrlQuery 개체를 만들고 이에 대한 호출을합니다. 당신이 URL로 params을 사용하지 않는하지만 단지 toString 도우미로, 당신도 유형을 변경 단지 시도 할 수 있기 때문에 그런 다음 당신은 URL

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

params.setQuery(paramsQuery); 

에 완성 된 쿼리를 설정

QUrlQuery params; 

및 유지 대부분의 코드는 그대로