在Qt
4中,使用QUrl
的以下代码有效:
QUrl u;
foreach (const settings::PostItem & pi, settings.post)
u.addQueryItem(pi.name, pi.value);
postData = u.encodedQuery();
注意:此代码来自wkhtmltopdf,postData
是QByteArray。
但是,Qt
5不再具有addQueryItem()
功能。你如何移植这段代码?
答案 0 :(得分:21)
为了确保与Qt
4的兼容性,请在文件顶部添加以下行:
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
# include <QUrlQuery>
#endif
这意味着如果您针对QUrlQuery
5.0.0或更高版本进行编译,#include
将仅为Qt
。
然后在问题中指定的代码上方添加以下行:
#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()
被使用,因为postData
是QByteArray
而query()
返回QString
。 toAscii()
中不推荐使用Qt
,但UTF-8只是必要时使用Unicode字符的ASCII子集。
编辑:如果您想使用包含网址部分的真实QUrl
,请添加以下内容:
QUrl url;
url.setQuery(q);