2

我有一个QUrl这样的:

https://www.example.com/index.html#token=SomeToken&user=guest

我想获得令牌的价值,即SomeToken。我知道方法QUrl::queryItemValue,所以这段代码必须有效:

void MainWindow::get_token(QUrl url)
{
    url = url.toString().replace("?","#");
    QString token = url.queryItemValue("token");
}

但是在Qt5我不能使用这种方法时,我该如何解析 url?

4

2 回答 2

3

有新的QUrlQuery班级Qt5。NewQUrl还不支持这个方法,所以你应该使用QUrlQuery解析(它有这个和其他方法)。利用

QUrlQuery query(url);
qDebug() << query.queryItemValue("token");

注意:小心replace因为QUrlQuery给你正确的结果

?token=SomeToken不是#token=SomeToken

http://qt-project.org/doc/qt-5/qurlquery.html

于 2014-11-03T20:38:56.343 回答
0

QUrlQuery queryItemValue 方法在 Qt 5.9 中无法正常工作所以我编写了自己的函数来解析 GET 参数

#include <QCoreApplication>
#include <QUrlQuery>
#include <QDebug>
#include <QMap>
#include <QUrl>

QMap<QString,QString> ParseUrlParameters(QString &url)
{
QMap<QString,QString> ret;
if(url.indexOf('?')==-1)
{
    return ret;
}

QString tmp = url.right(url.length()-url.indexOf('?')-1);
QStringList paramlist = tmp.split('&');

for(int i=0;i<paramlist.count();i++)
{
    QStringList paramarg = paramlist.at(i).split('=');
    ret.insert(paramarg.at(0),paramarg.at(1));
}

return ret;
}



int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString url = "http://test1.ru/?token=test&email=test1";

    QUrlQuery query(url);
    qDebug() << "queryItemValue does not work in Qt 5.9.0 with dynamic QString" << query.queryItemValue("token") << "("<< endl;

    qDebug() << "ParseUrlParameters(...) works fine..."<< endl;

    QMapIterator<QString, QString> i(ParseUrlParameters(url));
    while (i.hasNext()) 
    {
        i.next();
        qDebug() << i.key() << ":" << i.value();
    }

    return a.exec();
}

在此处输入图像描述

于 2017-11-26T16:29:36.800 回答