12

4 Qt、以下代码使用QUrl有效:

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

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

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

4

1 回答 1

21

为了确保与Qt4 的兼容性,请在文件顶部添加以下行:

#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
#   include <QUrlQuery>
#endif

这意味着只有在您针对5.0.0 或更高版本进行编译QUrlQuery时才会为d。#includeQt

然后在问题中指定的代码上方添加以下行:

#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()使用是因为postDatais aQByteArrayquery()返回 a QStringtoAscii()Qt5 中已弃用,但 UTF-8 是 ASCII 的子集,仅在必要时使用 Unicode 字符。

编辑:如果您想使用QUrl具有 URL 部分的实数,请添加:

 QUrl url;
 url.setQuery(q);
于 2013-01-22T18:12:02.903 回答