2013-01-22 5 views
10

다음 코드는 QUrl 작품을 사용 :Qt5의 QUrlQuery에 QUrl addQueryItem을 어떻게 포팅 하시겠습니까? <code>Qt</code> 4에서

QUrl u; 
foreach (const settings::PostItem & pi, settings.post) 
    u.addQueryItem(pi.name, pi.value); 
postData = u.encodedQuery(); 

참고을 : wkhtmltopdfpostData가 QByteArray이다에서이 코드입니다.

그러나 Qt 5에는 더 이상 addQueryItem() 기능이 없습니다. 어떻게이 코드를 이식합니까? 파일의 맨 위에 다음 줄을 추가, Qt 4과의 호환성을 보장하기 위해

답변

20

는 :

#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) 
# include <QUrlQuery> 
#endif 

이것은 당신이 Qt 5.0.0에 대해 컴파일하는 경우 QUrlQuery#include D를된다는 것을 의미합니다 더 커.

그런 다음 질문에 지정된 코드 위에 다음 줄을 추가합니다

#if QT_VERSION < QT_VERSION_CHECK(5,0,0) 

다음 질문에 지정된 코드를 아래 코드 삽입 :

#else 
    QUrlQuery q; 
    foreach (const settings::PostItem & pi, settings.post) 
     q.addQueryItem(pi.name, pi.value); 
    postData = q.query(QUrl::FullyEncoded).toUtf8(); 
#endif 

참고을 : toUtf8()입니다 postDataQByteArray이고 query()QString을 반환하기 때문에 사용됩니다. toAscii()Qt 5에서 더 이상 사용되지 않지만 UTF-8은 필요한 경우에만 유니 코드 문자가있는 ASCII의 하위 집합입니다.

편집가 : 경우에 당신이 URL 부분을 가지고 실제 QUrl를 사용하려면,이 추가

QUrl url; 
url.setQuery(q);