问题
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?
回答1:
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