2013-01-22 5 views
10

In Qt 4, mit dem folgenden Code QUrl Werke:Wie portiere ich QUrl addQueryItem zu Qt5's QUrlQuery?

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

NOTES: Dieser Code ist aus wkhtmltopdf und postData ein QByteArray ist.

Allerdings hat Qt 5 die addQueryItem() Funktion nicht mehr. Wie portierst du diesen Code?

Antwort

20

Um Kompatibilität zu gewährleisten mit Qt 4, die folgenden Zeilen am Anfang der Datei hinzufügen:

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

Das bedeutet, dass QUrlQuery nur #include d sein, wenn Sie gegen Qt 5.0.0 kompilieren oder größer.

Dann fügen Sie die folgende Zeile über dem in der Frage angegebenen Code:

#if QT_VERSION < QT_VERSION_CHECK(5,0,0) 

und dann diesen Code einfügen unter dem Code in der Frage angegeben:

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

HINWEIS: toUtf8() ist verwendet, weil postData eine QByteArray und query() eine QString zurückgibt. toAscii() wurde in Qt 5 veraltet, aber UTF-8 ist eine Teilmenge von ASCII mit Unicode-Zeichen nur bei Bedarf.

EDIT: Im Fall, dass Sie ein echtes QUrl verwenden, die einen URL Teil hat, fügen Sie diese:

QUrl url; 
url.setQuery(q); 
Verwandte Themen