Как вы добавляете 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 d, если вы компилируете против 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() возвращает a QString. toAscii() устарел в Qt 5, но UTF-8 является подмножеством ASCII с символами Unicode только при необходимости.

EDIT. Если вы хотите использовать реальный QUrl, который имеет часть URL, добавьте это:

 QUrl url;
 url.setQuery(q);