2013-01-22 9 views
10

In Qt 4, il seguente codice usando QUrl lavori:Come si porta QURL addQueryItem su QUrlQuery di Qt5?

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

NOTE: questo codice è da wkhtmltopdf e postData è un QByteArray.

Tuttavia, Qt 5 non ha più la funzione addQueryItem(). Come porti questo codice?

risposta

20

Al fine di garantire la compatibilità con Qt 4, aggiungere le seguenti righe nella parte superiore del file:

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

Questo significa che QUrlQuery sarà solo #include d se si sta compilando contro Qt 5.0.0 o maggiore.

quindi aggiungere la seguente riga sopra il codice specificato nella domanda:

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

e quindi inserire il codice sotto il codice specificato nella domanda:

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

NOTA: toUtf8() è utilizzato perché postData è un e query() restituisce un QString. toAscii() è stato dichiarato obsoleto in Qt 5, ma UTF-8 è un sottoinsieme di ASCII con caratteri Unicode solo quando necessario.

EDIT: Nel caso in cui si desidera utilizzare un vero e proprio QUrl che ha una parte URL, aggiungere questo:

QUrl url; 
url.setQuery(q);