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 #include
d 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);
来源:https://stackoverflow.com/questions/14465263/how-do-you-port-qurl-addqueryitem-to-qt5s-qurlquery