문제

In Qt 4, the following code using QUrl works:

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

NOTES: this code is from wkhtmltopdf and postData is a QByteArray.

However, Qt 5 does not have the addQueryItem() function anymore. How do you port this code?

도움이 되었습니까?

해결책

In order to ensure compatibility with Qt 4, add the following lines at the top of your file:

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

This means that QUrlQuery will only be #included if you are compiling against Qt 5.0.0 or greater.

Then add the following line above the code specified in the question:

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

and then insert this code below the code specified in the question:

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

NOTE: toUtf8() is used because postData is a QByteArray and query() returns a QString. toAscii() was deprecated in Qt 5, but UTF-8 is a subset of ASCII with Unicode characters only when necessary.

EDIT: In the case you want to use a real QUrl that has a URL portion, add this:

 QUrl url;
 url.setQuery(q);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top