Как вы перенесете QUrl addQueryItem в Qt5 QUrlQuery?

В 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() функционировать больше. Как вы переносите этот код?

1 ответ

Решение

Для обеспечения совместимости с Qt 4, добавьте следующие строки вверху вашего файла:

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

Это означает, что QUrlQuery будет только #includeд, если вы компилируете против Qt 5.0.0 или выше.

Затем добавьте следующую строку над кодом, указанным в вопросе:

#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 5, но UTF-8 является подмножеством ASCII с символами Unicode только при необходимости.

РЕДАКТИРОВАТЬ: В случае, если вы хотите использовать реальный QUrl который имеет часть URL, добавьте это:

 QUrl url;
 url.setQuery(q);
Другие вопросы по тегам