StupidBeauty
Read times:1916Posted at: - no title specified

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:: QUrlQuery (const  QUrl  &  url )

构造 一个 QUrlQuery 对象 ,并且使用默认的查询分隔符来解析 url 这个URL中包含的查询字符串。 要想使用其它分隔 符来解析某个查询字符串的话, 妳应当先使用 setQueryDelimiters ()来设置它们,然后使用 setQuery () 来设置查询字符串。

参考 QUrl::query ()

QString  QUrlQuery:: queryItemValue (const  QString  &  key QUrl::ComponentFormattingOptions encoding  = QUrl::PrettyDecoded) const

返回URL 中与键 key 关联的那个查询值,并且使用 encoding 中指定的选项来 对返回值进行编码。如果 未找到键 key ,则这个函数会返回一个空白字符串。如果 妳想区分出究竟 这个键对应着 空白 值还是不存在,那么, 妳应当首先使用 hasQueryItem ()来检查该键的存在性。

如果 key 出现 了多次,则, 这个函数会返回它所找到的第一个, 这里所说的顺序是,它们 在查询字符串中出现的顺序或者使用 addQueryItem ()添加 的顺序。

参考 addQueryItem () allQueryItemValues () 编码

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands