首先值得一提的是:
QT5 以下和以上是有所不同的。
然后, 为什么要解析和组后网址?
当我们的客户端软件里面嵌入网页时,在与网页交互的过程中, 比如说,单击客户端嵌入的网页上的某个按钮时, 我们客户端需要做处理时, 这时就需要知道网页端,到底想让我们做什么处理。我们需要拿到, 或者能拿到些什么参数来处理。
比如说,我单击网页后,通过绑定 下面的信号与槽(linkClicked(QUrl) 信号, 是qwebview自身的信号)
connect(page, SIGNAL(linkClicked(QUrl)), this, SLOT(slotLinkClicked(QUrl)));
得到返回的url;
asfle://follow?type=follow&start=00:00:01,493 &over= 00:00:11,488&exercise_id=6&media_id=13&examination_id=2
这时,我们就需要来解析这个url,来获取到对应的参数, 进行客户端的处理。
在这个url中,有几个地方需要注意:
前面那个是url中asfle是scheme, 而问号前的“follow”是代表host, 后面是query部分,就是一个参数对应一个值, 就是键和值的关系。
我们可以通过前面scheme和host可以判断是否是你需要的链接, 再通过解析后面的query来获取对应的参数。
如:我们要得到开始时间start后面的00:00:01,493就可以通过,
const QString startTime= url.queryItemValue("start");
// 上面是QT4的获取方法
QUrlQuery q(url);
const QString startTime= q.queryItemValue("start");
//这是QT5的获取方法
然后就是把参数组后成一个链接:
QT4表示为:
QUrl url;
url.setUrl(mainUrl);
//mainUrl是不带后面参数的
url.addQueryItem(tr("start"), tr("00:00:01,493"));
//这是其中一个的表示方法,其它的一样。
如果有用上session则:
addSessionIdQueryItem(&url);
QT5表示为:
QUrl url;
url.setUrl(mainUrl);
QUrlQuery q;
addSessionIdQueryItem(&q);
q.addQueryItem(tr("start"), tr("00:00:01,493"));
.......其它的一样表示
url.setQuery(q);