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

wad*_*ash 12 qt qurl qt5

Qt4,使用下面的代码QUrl工作:

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

注意:此代码来自wkhtmltopdf并且postData是QByteArray.

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

wad*_*ash 21

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

#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
#   include <QUrlQuery>
#endif
Run Code Online (Sandbox Code Playgroud)

这意味着QUrlQuery只有在#include编译Qt5.0.0或更高版本时才会出现这种情况.

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

#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
Run Code Online (Sandbox Code Playgroud)

然后在问题中指定的代码下面插入此代码:

#else
    QUrlQuery q;
    foreach (const settings::PostItem & pi, settings.post)
        q.addQueryItem(pi.name, pi.value);
    postData = q.query(QUrl::FullyEncoded).toUtf8();
#endif
Run Code Online (Sandbox Code Playgroud)

注意:toUtf8()使用因为postData是a QByteArrayquery()返回a QString.toAscii()Qt5 中已弃用,但UTF-8是仅在必要时使用Unicode字符的ASCII子集.

编辑:如果您想使用QUrl具有URL部分的实际,请添加以下内容:

 QUrl url;
 url.setQuery(q);
Run Code Online (Sandbox Code Playgroud)