Как вы перенесете 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);