你如何将QUrl addQueryItem移植到Qt5的QUrlQuery?

时间:2013-01-22 18:12:03

标签: qt qt5 qurl

Qt 4中,使用QUrl的以下代码有效:

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

注意:此代码来自wkhtmltopdfpostData是QByteArray。

但是,Qt 5不再具有addQueryItem()功能。你如何移植这段代码?

1 个答案:

答案 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()被使用,因为postDataQByteArrayquery()返回QStringtoAscii()中不推荐使用Qt,但UTF-8只是必要时使用Unicode字符的ASCII子集。

编辑:如果您想使用包含网址部分的真实QUrl,请添加以下内容:

 QUrl url;
 url.setQuery(q);