2010-09-13 74 views
0
QUrl url("bword://blood transfusion"); 
QString res = url.toString(); 

为什么我得到字符串“bword:”而不是“bword://输血”?如何检索一个有空格的QUrl字符串?

如何从QUrl中获取字符串“bword:// blood transfusion”?

+0

看起来像是一个Qt bug ... – 2010-09-13 12:56:22

+0

检查url.isValid()是true还是false。并尝试没有空间。 – 2010-09-13 14:41:49

回答

3

URL语法可能相当复杂,请参阅此Wikipedia article。问题是你的URL不包含权威字段,它只有方案字段“bword”和路径“//输血”。并根据RFC3986 - Uniform Resource Identifier (URI): Generic Syntax

当权限不存在,则 路径不能有两个斜杠 字符(“//”)。

因此,您的网址无效(尽管isValid()返回true)。将您的代码更改为:

QUrl url("bword:/blood transfusion"); 
QString res = url.toString(); 
+1

'bword:输血'也可以工作(假设系统对付URN)。 – 2010-09-13 15:41:35

+0

确实,http:/ foo bar的工作原理,http:// foobar也是如此。 QUrl中的错误似乎是它部分解析了URL - IMO在解析失败时应该创建一个完全空的无效对象(QUrl :: isValid()== false)。 – 2010-09-13 17:49:26

+0

谢谢你的解决方案。我得到的网址来自stardict词典文件的数据文件。也许我只能重建字典来更改网址。 – simpzan 2010-09-15 12:01:07