Qt5.3文档翻译:QUrlQuery类,QUrlQuery Class
QUrlQuery 类提供了一种手段,用来处理 一个URL 的查询部分中出现的键/值对。 详细说明……
头文件: |
#include <QUrlQuery> |
qmake: |
QT += core |
自此版本开始引入: |
Qt 5.0 |
注意 : 这个类中的所有函数都是 可重入的 。
QUrlQuery类提供了一种手段,用来处理一个URL 的查询部分中出现的键/值对。
它被用于解析从像下图这样的URL中取出的查询字符串:
像上图中这样的查询字符串, 被用于在URL 中传输各个参数,并且 ,通常会被解析为多个 键/值对。 上面这个,解析 了之后, 在列表中将会有两个条目,它们的键分别是 "type" 和 "color" 。 QUrlQuery 还可以被用于 从查询的各个单独组件中构建出 一个查询字符串, 这个查询字符串可以通过 QUrl::setQuery ()来设置 给URL对象 。
解析 一个查询字符串的最常见方式就是, 在构造函数中传入查询字符串,以便对它进行初始化。或者 , 可使用 setQuery ()方法来设置要解析的查询字符串 。 那个方法也可以用来解析 带有非标准分隔符的查询字符串, 只需要使用 setQueryDelimiters ()函数来设置特殊的分隔符就可以了。
编码 后的查询字符串,可使用 query ()来获取。 这会取出内部存储的所有条目,并且使用所设置的分隔符来编译出查询字符串。
QUrlQuery 中的所有取值方法 都支持一个 QUrl::ComponentFormattingOptions 类型 的可选参数,包括 query () , 这个参数的意思是,如何处理那些 有问题的数据。 除了 QUrl::FullyDecoded 之外 , 在其它情况下, 所返回的值必须仍然被认为是一个以百分 号编码的字符串,因为 ,有些值无法 以解码后的形式来表示 (例如控制字符 、 以及 一些无法被解码为 UTF-8 的字节序列 ) 。 正因为这个原因,百分 号会一直使用"%25"字符串来表示。
网页浏览器通常会将HTML 表单(FORM)元素中出现的空格编码为加号("+"),而将加号编码为它的百分号表示形式(%2B)。但是,与URL相关的互联网规范中,并不认为空格和加号是等价的。
出于这个原因,QUrlQuery从不会将空格编码为"+",也从不会将"+"解码为空格。而是,在编码的形式中,以"%20"来表示空格。
同时,为了支持对HTML 表单的编码,QUrlQuery从不会将"%2B"序列解码为一个加号,也不会对加号进行编码。事实上,在键、值或查询字符串中出现的任何"%2B"或"+"序列,都会保持原样(例外就是,"%2b"会被转换成大写变成"%2B")。
在 QUrl::FullyDecoded 模式 下,所有 的经过百分号编码的序列都会被完全解码,而 '%' 被用来表示它自身。 QUrl::FullyDecoded 应当小心使用 ,因为 ,它可能引起数据丢失。参考 QUrl::FullyDecoded 文档 以了解哪些数据可能丢失。
只有 当妳 的程序所处的上下文 不欢迎百分号编码形式的文本内容时,才应当使用这种格式化模式。注意 , QUrlQuery 中的属性设置器和查询方法不支持与之相对的 QUrl::DecodedMode 解析模式 ,所以,使用 QUrl::FullyDecoded 来获取一个键列表的话,可能 会 发现该对象中某些键不存在。
默认情况 下, QUrlQuery使用等号("=") 来将键与值分隔开来,并且使用逻辑 与符号 ("&") 来将一个个键值对分隔开来。 可以使用 setQueryDelimiters ()来改变 QUrlQuery用来解析 及重构查询字符串的分隔符。
非标准的分隔符,应当从RFC 3986 称作“子分隔符”("sub-delimiters")的那些字符中选择。它们包括:
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
不支持使用其它字符,如果妳执意使用,则会产生未知后果。QUrlQuery并不会验证妳是否提供了一个有效的分隔符。
参考 QUrl 。
构造 一个 QUrlQuery 对象 ,并且使用默认的查询分隔符来解析 url 这个URL中包含的查询字符串。 要想使用其它分隔 符来解析某个查询字符串的话, 妳应当先使用 setQueryDelimiters ()来设置它们,然后使用 setQuery () 来设置查询字符串。
参考 QUrl::query () 。
返回URL 中与键 key 关联的那个查询值,并且使用 encoding 中指定的选项来 对返回值进行编码。如果 未找到键 key ,则这个函数会返回一个空白字符串。如果 妳想区分出究竟 这个键对应着 空白 值还是不存在,那么, 妳应当首先使用 hasQueryItem ()来检查该键的存在性。
如果 键 key 出现 了多次,则, 这个函数会返回它所找到的第一个, 这里所说的顺序是,它们 在查询字符串中出现的顺序或者使用 addQueryItem ()添加 的顺序。
参考 addQueryItem () 、 allQueryItemValues () 和 编码 。
Your opinionsHxLauncher: Launch Android applications by voice commands