我有一个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?
发布于 2014-11-03 20:38:56
在QUrlQuery中有新的Qt5类。新的QUrl还不支持这个方法,所以您应该使用QUrlQuery进行解析(它有这个方法和其他方法)。使用
QUrlQuery query(url);
qDebug() << query.queryItemValue("token");注意:请小心使用replace,因为QUrlQuery为您提供了正确的结果
?token=SomeToken而不是#token=SomeToken
http://qt-project.org/doc/qt-5/qurlquery.html
发布于 2017-11-26 16:29:36
QUrlQuery queryItemValue方法在QT5.9中不能正常工作,所以我编写了自己的函数来解析获取参数
#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();
}

https://stackoverflow.com/questions/26722615
复制相似问题