Pergunta

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?

Foi útil?

Solução

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top