How do you port QUrl addQueryItem to Qt5's QUrlQuery?

后端 未结 1 963
悲&欢浪女
悲&欢浪女 2021-02-05 18:12

In Qt 4, the following code using QUrl works:

QUrl u;
foreach (const settings::PostItem & pi, settings.post)
    u.addQueryItem(pi.         


        
1条回答
  •  悲哀的现实
    2021-02-05 18:47

    In order to ensure compatibility with Qt 4, add the following lines at the top of your file:

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

    This means that QUrlQuery will only be #included if you are compiling against Qt 5.0.0 or greater.

    Then add the following line above the code specified in the question:

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

    and then insert this code below the code specified in the question:

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

    NOTE: toUtf8() is used because postData is a QByteArray and query() returns a QString. toAscii() was deprecated in Qt 5, but UTF-8 is a subset of ASCII with Unicode characters only when necessary.

    EDIT: In the case you want to use a real QUrl that has a URL portion, add this:

     QUrl url;
     url.setQuery(q);
    

    0 讨论(0)
提交回复
热议问题