QUrl Class
QUrl 类为处理 URL 提供了一个方便的接口。更多
Header: | #include <QUrl> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 所有成员(包括继承成员)列表
- QUrl 属于输入/输出和网络、网络编程 API 和隐式共享类。
该类具有弱可比性。
注意:该类中的所有函数都是可重入的。
公共类型
(since 6.3) enum | AceProcessingOption { IgnoreIDNWhitelist, AceTransitionalProcessing } |
flags | AceProcessingOptions |
enum | ComponentFormattingOption { PrettyDecoded, EncodeSpaces, EncodeUnicode, EncodeDelimiters, EncodeReserved, …, FullyDecoded } |
flags | ComponentFormattingOptions |
flags | FormattingOptions |
enum | ParsingMode { TolerantMode, StrictMode, DecodedMode } |
enum | UrlFormattingOption { None, RemoveScheme, RemovePassword, RemoveUserInfo, RemovePort, …, NormalizePathSegments } |
enum | UserInputResolutionOption { DefaultResolution, AssumeLocalFile } |
flags | UserInputResolutionOptions |
公共函数
QUrl() | |
QUrl(const QString &url, QUrl::ParsingMode parsingMode = TolerantMode) | |
QUrl(const QUrl &other) | |
QUrl(QUrl &&other) | |
~QUrl() | |
QUrl | adjusted(QUrl::FormattingOptions options) const |
QString | authority(QUrl::ComponentFormattingOptions options = PrettyDecoded) const |
void | clear() |
QString | errorString() const |
QString | fileName(QUrl::ComponentFormattingOptions options = FullyDecoded) const |
QString | fragment(QUrl::ComponentFormattingOptions options = PrettyDecoded) const |
bool | hasFragment() const |
bool | hasQuery() const |
QString | host(QUrl::ComponentFormattingOptions options = FullyDecoded) const |
bool | isEmpty() const |
bool | isLocalFile() const |
bool | isParentOf(const QUrl &childUrl) const |
bool | isRelative() const |
bool | isValid() const |
bool | matches(const QUrl &url, QUrl::FormattingOptions options) const |
QString | password(QUrl::ComponentFormattingOptions options = FullyDecoded) const |
QString | path(QUrl::ComponentFormattingOptions options = FullyDecoded) const |
int | port(int defaultPort = -1) const |
QString | query(QUrl::ComponentFormattingOptions options = PrettyDecoded) const |
QUrl | resolved(const QUrl &relative) const |
QString | scheme() const |
void | setAuthority(const QString &authority, QUrl::ParsingMode mode = TolerantMode) |
void | setFragment(const QString &fragment, QUrl::ParsingMode mode = TolerantMode) |
void | setHost(const QString &host, QUrl::ParsingMode mode = DecodedMode) |
void | setPassword(const QString &password, QUrl::ParsingMode mode = DecodedMode) |
void | setPath(const QString &path, QUrl::ParsingMode mode = DecodedMode) |
void | setPort(int port) |
void | setQuery(const QString &query, QUrl::ParsingMode mode = TolerantMode) |
void | setQuery(const QUrlQuery &query) |
void | setScheme(const QString &scheme) |
void | setUrl(const QString &url, QUrl::ParsingMode parsingMode = TolerantMode) |
void | setUserInfo(const QString &userInfo, QUrl::ParsingMode mode = TolerantMode) |
void | setUserName(const QString &userName, QUrl::ParsingMode mode = DecodedMode) |
void | swap(QUrl &other) |
CFURLRef | toCFURL() const |
QString | toDisplayString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const |
QByteArray | toEncoded(QUrl::FormattingOptions options = FullyEncoded) const |
QString | toLocalFile() const |
NSURL * | toNSURL() const |
QString | toString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const |
QString | url(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const |
QString | userInfo(QUrl::ComponentFormattingOptions options = PrettyDecoded) const |
QString | userName(QUrl::ComponentFormattingOptions options = FullyDecoded) const |
QUrl & | operator=(QUrl &&other) |
QUrl & | operator=(const QString &url) |
QUrl & | operator=(const QUrl &url) |
静态公共成员
(since 6.3) QString | fromAce(const QByteArray &domain, QUrl::AceProcessingOptions options = {}) |
QUrl | fromCFURL(CFURLRef url) |
QUrl | fromEncoded(QByteArrayView input, QUrl::ParsingMode mode = TolerantMode) |
QUrl | fromLocalFile(const QString &localFile) |
QUrl | fromNSURL(const NSURL *url) |
QString | fromPercentEncoding(const QByteArray &input) |
QList<QUrl> | fromStringList(const QStringList &urls, QUrl::ParsingMode mode = TolerantMode) |
QUrl | fromUserInput(const QString &userInput, const QString &workingDirectory = QString(), QUrl::UserInputResolutionOptions options = DefaultResolution) |
QStringList | idnWhitelist() |
void | setIdnWhitelist(const QStringList &list) |
(since 6.3) QByteArray | toAce(const QString &domain, QUrl::AceProcessingOptions options = {}) |
QByteArray | toPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray()) |
QStringList | toStringList(const QList<QUrl> &urls, QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) |
相关非成员
bool | operator!=(const QUrl &lhs, const QUrl &rhs) |
QDataStream & | operator<<(QDataStream &out, const QUrl &url) |
bool | operator==(const QUrl &lhs, const QUrl &rhs) |
QDataStream & | operator>>(QDataStream &in, QUrl &url) |
宏
详细说明
QUrl 可以解析和构建编码和非编码形式的 URL。QUrl 还支持国际化域名 (IDN)。
使用 QUrl 的最常见方法是通过构造函数初始化它,方法是传递一个包含完整 URL 的QString 。也可以使用QUrl::fromEncoded() 从包含完整 URL 的QByteArray 创建 QUrl 对象,或使用QUrl::fromUserInput() 从不连贯的 URL 启发式创建 QUrl 对象。可以使用QUrl::toString() 或QUrl::toEncoded() 从 QUrl 获取 URL 表示。
URL 可以用两种形式表示:编码或未编码。未编码的表示形式适合向用户显示,而编码的表示形式通常是发送给网络服务器的。例如,未编码的 URL "http://bühler.example.com/List of applicants.xml "将以 "http://xn-bhler-kva.example.com/List%20of%20applicants.xml "的形式发送给服务器。
一个 URL 也可以通过调用setScheme(),setUserName(),setPassword(),setHost(),setPort(),setPath(),setQuery() 和setFragment() 逐个构建。还提供了一些方便的函数:setAuthority() 设置用户名、密码、主机和端口。setUserInfo() 一次设置用户名和密码。
调用isValid() 检查 URL 是否有效。这可以在构建 URL 的任何时候进行。如果isValid() 返回false
,则应先clear() URL,然后再继续,或者使用setUrl() 重新解析一个新的 URL。
使用QUrlQuery 类及其方法QUrlQuery::setQueryItems(),QUrlQuery::addQueryItem() 和QUrlQuery::removeQueryItem() 构建查询特别方便。使用QUrlQuery::setQueryDelimiters() 可自定义用于生成查询字符串的分隔符。
为了方便生成已编码的 URL 字符串或查询字符串,有两个静态函数fromPercentEncoding() 和toPercentEncoding() 用于处理QString 对象的百分比编码和解码。
fromLocalFile() 通过解析本地文件路径构建 QUrl。toLocalFile() 将 URL 转换为本地文件路径。
通过toString() 获取 URL 的人可读表示法。这种表示法适合向用户显示未编码的 URL。而由toEncoded() 返回的编码形式则用于内部使用,可传递给网络服务器、邮件客户端等。这两种形式在技术上都是正确的,并能明确表示相同的 URL,事实上,将任何一种形式传递给 QUrl 的构造函数或setUrl() 都会产生相同的 QUrl 对象。
QUrl 符合RFC 3986(统一资源标识符:通用语法)中的 URI 规范,并包括RFC 1738(统一资源定位器)中的方案扩展。QUrl 中的大小写折叠规则符合RFC 3491(Nameprep:A Stringprep Profile for Internationalized Domain Names (IDN))。它还兼容 freedesktop.org 的文件 URI 规范,前提是本地使用 UTF-8 对文件名进行编码(IDN 要求)。
相对 URL 与相对路径
调用isRelative() 将返回 URL 是否为相对 URL。相对 URL 没有scheme 。例如
qDebug()<<QUrl("main.qml").isRelative();// true: no scheme qDebug() << QUrl("qml/main.qml").isRelative(); // true: no scheme qDebug() << QUrl("file:main.qml").isRelative(); // false: has "file" scheme qDebug() << QUrl("file:qml/main.qml").isRelative(); // false: has "file" scheme
请注意,URL 可以是绝对路径,但也可以包含相对路径,反之亦然:
// 绝对 URL,相对路径 QUrlurl("file:file.txt"); qDebug() << url.isRelative(); // false: has "file" scheme qDebug() << QDir::isAbsolutePath(url.path()); // false: relative path // 相对 URL,绝对路径url=QUrl("/home/user/file.txt"); qDebug() << url.isRelative(); // true: has no scheme qDebug() << QDir::isAbsolutePath(url.path()); // true: absolute path
相对 URL 可以作为参数传递给resolved() 来解析,后者返回的是绝对 URL。isParentOf() 用于确定一个 URL 是否是另一个 URL 的父 URL。
错误检查
QUrl 能够在解析 URL 或使用单独的设置器方法(如setScheme(),setHost() 或setPath() 设置 URL 组件时检测出 URL 中的许多错误。)如果解析或设置函数成功,之前记录的任何错误条件都将被丢弃。
默认情况下,QUrl 设置器方法在QUrl::TolerantMode 中运行,这意味着它们可以接受一些常见错误和错误的数据表示。另一种解析方法是QUrl::StrictMode ,它会进行进一步的检查。有关解析模式差异的说明,请参阅QUrl::ParsingMode 。
QUrl 只检查是否符合 URL 规范。它并不试图验证高级协议 URL 是否符合其他处理程序所期望的格式。例如,QUrl 认为以下 URI 都是有效的,即使它们在使用时没有意义:
- "http:/filename.html
- "mailto://example.com
当解析器遇到错误时,它会通过isValid() 返回 false 和toString() /toEncoded() 返回空字符串来发出信号。如果需要向用户显示 URL 解析失败的原因,可通过调用errorString() 从 QUrl 获取错误条件。请注意,该信息具有很强的技术性,最终用户可能无法理解。
QUrl 只能记录一个错误条件。如果发现不止一个错误,则无法确定报告的是哪个错误。
字符转换
在处理 URL 和字符串时,请遵循以下规则以避免错误的字符转换:
- 从QByteArray 或 char* 创建QString 以包含 URL 时,请务必使用QString::fromUtf8()。
成员类型文档
[since 6.3]
枚举 QUrl::AceProcessingOption
flags QUrl::AceProcessingOptions
ACE 处理选项控制 URL 转换为 ASCII 兼容编码或从 ASCII 兼容编码转换而来的方式。
常量 | 值 | 说明 |
---|---|---|
QUrl::IgnoreIDNWhitelist | 0x1 | 将 URL 转换为 Unicode 时忽略 IDN 白名单。 |
QUrl::AceTransitionalProcessing | 0x2 | 使用 UTS #46 中描述的过渡处理。这样可以更好地兼容 IDNA 2003 规范。 |
默认情况下使用非过渡处理,只允许在 IDN 白名单中列出了顶级域的 URL 中使用非 ASCII 字符。
此枚举在 Qt 6.3 中引入。
AceProcessingOptions 类型是QFlags<AceProcessingOption> 的类型定义。它存储 AceProcessingOption 值的 OR 组合。
另请参见 toAce()、fromAce() 和idnWhitelist()。
枚举 QUrl::ComponentFormattingOption
flags QUrl::ComponentFormattingOptions
组件格式化选项定义了 URL 的组件在写成文本时的格式化方式。在toString() 和toEncoded() 中使用时,它们可以与QUrl::FormattingOptions 中的选项结合使用。
常量 | 值 | 说明 |
---|---|---|
QUrl::PrettyDecoded | 0x000000 | 组件以 "pretty form"(漂亮形式)返回,大部分百分比编码字符已解码。PrettyDecoded 的具体行为因组件而异,也可能随 Qt 版本的不同而变化。这是默认设置。 |
QUrl::EncodeSpaces | 0x100000 | 保留空格字符的编码形式("%20")。 |
QUrl::EncodeUnicode | 0x200000 | 将非 US-ASCII 字符保留为其 UTF-8 百分位编码形式(例如,"%C3%A9 "表示 U+00E9 编码点,拉丁小写字母 E WITH ACUTE)。 |
QUrl::EncodeDelimiters | 0x400000 | 0x800000 | 保留某些分隔符的编码形式,就像 URL 全文以文本形式显示时一样。受该选项影响的分隔符会因组件而异。在toString() 或toEncoded() 中,该标记不起作用。 |
QUrl::EncodeReserved | 0x1000000 | 将规范不允许出现在 URL 中的 US-ASCII 字符保留为编码形式。这是toString() 和toEncoded() 的默认设置。 |
QUrl::DecodeReserved | 0x2000000 | 对 URL 规范不允许出现在 URL 中的 US-ASCII 字符进行解码。这是单个组件的获取器的默认设置。 |
QUrl::FullyEncoded | EncodeSpaces | EncodeUnicode | EncodeDelimiters | EncodeReserved | 将所有字符保留为正确编码的形式,因为该组件会作为 URL 的一部分出现。与toString() 一起使用时,会生成QString 格式的完全兼容的 URL,与toEncoded() 的结果完全相同。 |
QUrl::FullyDecoded | FullyEncoded | DecodeReserved | 0x4000000 | 尝试尽可能多地解码。对于 URL 的单个组件,该模式会解码所有百分数编码序列,包括控制字符(U+0000 至 U+001F)和百分数编码形式的 UTF-8 序列。使用该模式可能会导致数据丢失,更多信息请参阅下文。 |
EncodeReserved 和 DecodeReserved 的值不应在一次调用中同时使用。如果发生这种情况,其行为将是未定义的。之所以将它们作为单独的值提供,是因为 "漂亮模式 "在保留字符方面的行为在某些组件上是不同的,特别是在完整的 URL 上。
完全解码
完全解码模式类似于 Qt XML 4.x 中返回QString 的函数的行为,即每个字符都代表其本身,且不具有任何特殊含义。即使是百分数字符('%')也是如此,它应被解释为字面意义上的百分数,而不是百分数编码序列的开头。在所有其他解码模式中,同样的实际字符用序列"%25 "表示。
在将使用 QUrl::FullyDecoded 获得的数据重新应用到QUrl 时,必须注意将QUrl::DecodedMode 参数用于设置器(如setPath() 和setUserName())。否则可能导致百分数字符('%')被重新解释为百分数编码序列的开头。
当 URL 的部分内容用于非 URL 上下文时,这种模式非常有用。例如,在 FTP 客户端程序中提取用户名、密码或文件路径时,应使用完全解码模式。
使用该模式时应小心谨慎,因为有两种情况无法在返回的QString 中可靠地表示出来。它们是
- 非 UTF-8 序列:URL 可能包含不构成有效 UTF-8 序列的百分比编码字符序列。由于 URL 需要使用 UTF-8 解码,因此任何解码器故障都会导致QString 在序列存在的地方包含一个或多个替换字符。
- 编码分隔符:URL 也允许区分字面形式的分隔符和百分比编码形式的等效分隔符。这在查询中最常见,但在 URL 的大部分内容中也是允许的。
下面的示例说明了这个问题:
QUrloriginal("http://example.com/?q=a%2B%3Db%26c"); QUrlcopy(original); copy.setQuery(copy.query(QUrl::FullyDecoded)、 QUrl::DecodedMode); qDebug() << original.toString(); // prints: http://example.com/?q=a%2B%3Db%26c qDebug() << copy.toString(); // prints: http://example.com/?q=a+=b&c
如果通过 HTTP GET 使用这两个 URL,网络服务器的解释可能会有所不同。在第一种情况下,它会解释为一个参数,关键字为 "q",值为 "a+=b&c"。在第二种情况下,它可能会解释为两个参数,其中一个参数的键为 "q",值为 "a =b",另一个参数的键为 "c",没有值。
ComponentFormattingOptions 类型是QFlags<ComponentFormattingOption> 的类型定义。它存储了 ComponentFormattingOption 值的 OR 组合。
另请参阅 QUrl::FormattingOptions 。
enum QUrl::ParsingMode
解析模式控制QUrl 解析字符串的方式。
常量 | 值 | 说明 |
---|---|---|
QUrl::TolerantMode | 0 | QUrl 将尝试纠正 URL 中的一些常见错误。该模式适用于解析来自不严格遵守标准的来源的 URL。 |
QUrl::StrictMode | 1 | 只接受有效的 URL。该模式适用于一般的 URL 验证。 |
QUrl::DecodedMode | 2 | QUrl 将以完全解码的形式解释 URL 组件,其中百分数字符代表其本身,而不是百分数编码序列的开头。该模式仅对设置 URL 组件的设置器有效;在 构造函数、 () 或 () 中不允许使用该模式。有关该模式的更多信息,请参阅 文档。QUrl fromEncoded setUrl QUrl::FullyDecoded |
在 TolerantMode 模式下,解析器具有以下行为:
- 空格和"%20":接受未编码的空格字符,并将其视为等同于"%20"。
- 单个"%"字符:任何出现的百分数字符"%"后面如果没有两个十六进制字符(例如,"13% coverage.html"),都将被"%25 "替换。请注意,一个单独的"%"字符将触发所有百分数字符的修正模式。
- 保留和非保留字符:编码后的 URL 只应包含几个字面意义的字符,所有其他字符都应按百分比编码。在 TolerantMode 中,如果在 URL 中发现这些字符,就会接受它们:空格/双引号/"<"/">"/""/"^"/"`"/ "{" / "|"/ "}"通过向toString() 或toEncoded() 传递QUrl::DecodeReserved ,可以再次解码这些字符。在单个组件的获取器中,这些字符通常以解码形式返回。
在严格模式下,如果发现解析错误,isValid() 将返回false
,而errorString() 将返回一条描述错误的信息。如果检测到不止一个错误,则无法确定报告哪个错误。
请注意,TolerantMode 通常不足以解析用户输入,因为用户输入中包含的错误和期望值往往超过解析器的处理能力。在处理直接来自用户的数据(而不是来自数据传输源(如其他程序)的数据)时,建议使用fromUserInput()。
另请参阅 fromUserInput(),setUrl(),toString(),toEncoded() 和QUrl::FormattingOptions 。
enum QUrl::UrlFormattingOption
flags QUrl::FormattingOptions
格式化选项定义 URL 以文本形式写出时的格式化方式。
常量 | 值 | 说明 |
---|---|---|
QUrl::None | 0x0 | URL 格式不变。 |
QUrl::RemoveScheme | 0x1 | 删除 URL 中的方案。 |
QUrl::RemovePassword | 0x2 | 删除 URL 中的任何密码。 |
QUrl::RemoveUserInfo | RemovePassword | 0x4 | 删除 URL 中的任何用户信息。 |
QUrl::RemovePort | 0x8 | 删除 URL 中的任何指定端口。 |
QUrl::RemoveAuthority | RemoveUserInfo | RemovePort | 0x10 | 删除用户名、密码、主机和端口。 |
QUrl::RemovePath | 0x20 | 删除 URL 的路径,只留下方案、主机地址和端口(如果存在)。 |
QUrl::RemoveQuery | 0x40 | 删除 URL 的查询部分("? |
QUrl::RemoveFragment | 0x80 | 删除 URL 的片段部分(包括 "#"字符)。 |
QUrl::RemoveFilename | 0x800 | 删除文件名(即路径中最后一个"/"之后的所有内容)。除非设置了 StripTrailingSlash,否则尾部的"/"将保留。仅在未设置 RemovePath 时有效。 |
QUrl::PreferLocalFile | 0x200 | 如果 URL 根据isLocalFile() 是本地文件,且不包含查询或片段,则会返回本地文件路径。 |
QUrl::StripTrailingSlash | 0x400 | 如果路径中存在尾部斜线,则会将其删除。 |
QUrl::NormalizePathSegments | 0x1000 | 修改路径以删除多余的目录分隔符,并尽可能解决". "和".. "问题。对于非本地路径,会保留相邻的斜线。 |
请注意,无论使用 Qt XML::FormattingOptions 与否,Nameprep(QUrl )中的大小写折叠规则要求主机名始终转换为小写。
也可以使用QUrl::ComponentFormattingOptions 中的选项。
FormattingOptions 类型是QFlags<UrlFormattingOption> 的类型定义。它存储了 UrlFormattingOption 值的 OR 组合。
另请参阅 QUrl::ComponentFormattingOptions 。
枚举 QUrl::UserInputResolutionOption
flags QUrl::UserInputResolutionOptions
用户输入解析选项定义了fromUserInput() 应如何解释字符串,这些字符串既可以是相对路径,也可以是 HTTP URL 的简短形式。例如,file.pl
既可以是本地文件,也可以是 URLhttp://file.pl
。
常数 | 值 | 说明 |
---|---|---|
QUrl::DefaultResolution | 0 | 默认的解析机制是检查fromUserInput 所给工作目录中是否存在本地文件,如果存在,则只返回本地路径。否则将假定为 URL。 |
QUrl::AssumeLocalFile | 1 | 该选项使fromUserInput() 总是返回本地路径,除非输入包含一个方案,如http://file.pl 。这对文本编辑器等应用程序非常有用,因为它们可以在文件不存在的情况下创建文件。 |
UserInputResolutionOptions 类型是QFlags<UserInputResolutionOption> 的类型定义。它存储了 UserInputResolutionOption 值的 OR 组合。
另请参阅 fromUserInput().
成员函数文档
QUrl::QUrl()
构造一个空的 QUrl 对象。
QUrl::QUrl(const QString &url, QUrl::ParsingMode parsingMode = TolerantMode)
通过解析url 构造一个 URL。请注意,该构造函数需要一个正确的 URL 或 URL-Reference,而不会试图猜测其意图。例如,以下声明
QUrl url("example.com");
将构造一个有效的 URL,但可能与预期不同,因为缺少了输入的scheme() 部分。对于类似上述的字符串,应用程序可能希望使用fromUserInput().对于这个构造函数或setUrl() 而言,以下可能才是其本意:
QUrl url("https://example.com");
QUrl 会自动对 URL 中不允许使用的所有字符进行百分比编码,并对代表未保留字符(字母、数字、连字符、下划线、点和斜线)的百分比编码序列进行解码。所有其他字符均保持原样。
使用解析器模式parsingMode 解析url 。在TolerantMode (默认)模式下,QUrl 会纠正某些错误,特别是出现未跟在两个十六进制数字后面的百分号字符('%'),并接受任何位置的任何字符。在StrictMode 中,编码错误是不能容忍的,QUrl 还将检查某些禁止使用的字符是否以未编码形式存在。如果在StrictMode 中检测到错误,isValid() 将返回 false。在这种情况下,不允许使用解析模式DecodedMode 。
示例
QUrl url("http://www.example.com/List of holidays.xml"); // url.toEncoded() == "http://www.example.com/List%20of%20holidays.xml"
要从编码字符串构建 URL,也可以使用fromEncoded():
这两个函数是等价的,而且在 Qt 5 中,这两个函数都接受编码数据。通常,QUrl 构造函数或setUrl() 与fromEncoded() 的选择取决于源数据:构造函数和setUrl() 使用QString ,而fromEncoded 使用QByteArray 。
另请参见 setUrl()、fromEncoded() 和TolerantMode 。
[noexcept]
QUrl::QUrl(const QUrl &other)
构造other 的副本。
[noexcept]
QUrl::QUrl(QUrl &&other)
Move-创建一个 QUrl 实例,使其指向other 所指向的同一对象。
[noexcept]
QUrl::~QUrl()
销毁器;在删除对象前立即调用。
QUrl QUrl::adjusted(QUrl::FormattingOptions options) const
返回调整后的 URL 版本。输出结果可通过options 中的标记进行自定义。
QUrl::ComponentFormattingOption 中的编码选项对该方法意义不大,QUrl::PreferLocalFile 也是如此。
该方法始终等同于QUrl(url.toString(options))。
另请参见 FormattingOptions,toEncoded() 和toString()。
QString QUrl::authority(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
如果定义了 URL 的权限,则返回该权限;否则返回空字符串。
该函数返回一个无歧义的值,其中可能包含仍按百分比编码的字符,以及QString 中无法以解码形式表示的某些控制序列。
options 参数控制用户信息组件的格式。本函数不允许使用QUrl::FullyDecoded 的值。如果需要获取完全解码的数据,请分别调用userName(),password(),host() 和port() 。
另请参阅 setAuthority()、userInfo()、userName()、password()、host() 和port()。
void QUrl::clear()
重置QUrl 的内容。调用此函数后,QUrl 等于使用默认空构造函数构造的内容。
另请参见 isEmpty()。
QString QUrl::errorString() const
如果上次修改QUrl 对象的操作出现解析错误,则返回错误信息。如果没有检测到错误,则此函数返回空字符串,isValid() 返回true
。
此函数返回的错误信息属于技术性质,最终用户可能无法理解。对于试图了解QUrl 为何不接受某些输入的开发人员来说,它主要是有用的。
另请参见 QUrl::ParsingMode 。
QString QUrl::fileName(QUrl::ComponentFormattingOptions options = FullyDecoded) const
返回文件名,不包括目录路径。
请注意,如果QUrl 对象给出的路径以斜线结尾,则文件名将被视为空文件名。
如果路径中不包含任何斜线,则文件名将全部返回。
示例
QUrl url("http://qt-project.org/support/file.html"); // url.adjusted(RemoveFilename) == "http://qt-project.org/support/" // url.fileName() == "file.html"
options 参数控制文件名组件的格式。所有值都会产生一个明确的结果。使用QUrl::FullyDecoded 时,所有百分数编码序列都会被解码;否则,返回值可能包含某些控制序列的百分数编码序列,这些序列在QString 中无法以解码形式表示。
另请参阅 path() 。
QString QUrl::fragment(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
返回 URL 的片段。要确定解析后的 URL 是否包含片段,请使用hasFragment() 。
options 参数控制片段组件的格式。所有值都会产生一个明确的结果。使用QUrl::FullyDecoded 时,所有百分数编码序列都会被解码;否则,返回值可能包含某些控制序列的百分数编码序列,而这些控制序列在QString 中无法以解码形式表示。
请注意,如果存在这些不可表示的序列,QUrl::FullyDecoded 可能会导致数据丢失。建议在非 URL 上下文中使用结果时使用该值。
另请参阅 setFragment() 和hasFragment()。
[static, since 6.3]
QString QUrl::fromAce(const QByteArray &domain, QUrl::AceProcessingOptions options = {})
返回给定域名domain 的 Unicode 格式,该格式采用 ASCII 兼容编码 (ACE) 进行编码。输出结果可通过options 传递标志进行自定义。此函数的结果等同于domain 。
如果domain 中的值无法编码,则将转换为QString 并返回。
ASCII 兼容编码(ACE)由 RFC 3490、RFC 3491 和 RFC 3492 定义,并由 Unicode 技术标准 #46 更新。它是应用程序中域名国际化(IDNA)规范的一部分,该规范允许使用非美国 ASCII 字符编写域名(如"example.com"
)。
该功能在 Qt 6.3 中引入。
[static]
QUrl QUrl::fromCFURL(CFURLRef url)
构建一个QUrl ,其中包含 CFURLurl 的副本。
[static]
QUrl QUrl::fromEncoded(QByteArrayView input, QUrl::ParsingMode mode = TolerantMode)
解析input 并返回相应的QUrl 。假定input 是编码形式,只包含 ASCII 字符。
使用mode 解析 URL。有关此参数的更多信息,请参阅setUrl() 。此处不允许使用QUrl::DecodedMode 。
注意: 在 6.7 之前的 Qt 版本中,此函数使用QByteArray ,而不是QByteArrayView 。如果您遇到编译错误,那是因为您的代码传递了可隐式转换为QByteArray 的对象,而不是QByteArrayView 。将相应的参数用QByteArray{~~~}
包起来,使转换显式化。这与旧版本的 Qt 向后兼容。
[static]
QUrl QUrl::fromLocalFile(const QString &localFile)
返回localFile 的QUrl 表示,解释为本地文件。该函数接受用斜线分隔的路径以及该平台的本地分隔符。
该函数还接受带有双斜线(或反斜线)的路径,以表示远程文件,如"//servername/path/to/file.txt"。请注意,只有某些平台可以使用QFile::open() 实际打开该文件。
空localFile 会导致空 URL(自 Qt XML 5.4 起)。
qDebug()<<QUrl::fromLocalFile("file.txt");// QUrl("file:file.txt") qDebug() << QUrl::fromLocalFile("/home/user/file.txt"); // QUrl("file:///home/user/file.txt") qDebug() << QUrl::fromLocalFile("file:file.txt"); // doesn't make sense; expects path, not url with scheme
在上面代码段的第一行中,文件 URL 是由本地相对路径构建的。使用相对路径的文件 URL 只有在有基本 URL 可以解析时才有意义。例如
QUrlurl=QUrl::fromLocalFile("file.txt"); QUrlbaseUrl=QUrl("file:/home/user/");// 错误:打印 QUrl("file:file.txt"),因为 url 已经有了一个方案 qDebug() << baseUrl.resolved(url);
要解决这样的 URL 问题,必须事先删除该方案:
// correct: prints QUrl("file:///home/user/file.txt")url.setScheme(QString()); qDebug() << baseUrl.resolved(url);
因此,相对文件路径最好使用相对 URL(即无方案):
QUrlurl=QUrl("file.txt"); QUrlbaseUrl=QUrl("file: /home/user/");// 打印 QUrl("file:///home/user/file.txt") qDebug() << baseUrl.resolved(url);
另请参见 toLocalFile()、isLocalFile() 和QDir::toNativeSeparators()。
[static]
QUrl QUrl::fromNSURL(const NSURL *url)
构建QUrl ,其中包含 NSURLurl 的副本。
[static]
QString QUrl::fromPercentEncoding(const QByteArray &input)
返回input 的解码副本。首先对input 进行百分数编码解码,然后将其从 UTF-8 转换为 unicode。
注意: 如果输入无效(例如包含序列"%G5 "的字符串,它不是有效的十六进制数),输出也将无效。例如:序列"%G5 "可能被解码为 "W"。
[static]
QList<QUrl> QUrl::fromStringList(const QStringList &urls, QUrl::ParsingMode mode = TolerantMode)
使用QUrl(str,mode) 将代表urls 的字符串列表转换为 url 列表。请注意,这意味着所有字符串都必须是 url,而不是本地路径。
[static]
QUrl QUrl::fromUserInput(const QString &userInput, const QString &workingDirectory = QString(), QUrl::UserInputResolutionOptions options = DefaultResolution)
如果可以从用户提供的userInput 字符串中推导出一个有效的 URL,则返回该 URL。如果推导不出,则返回无效的QUrl()。
这允许用户以纯字符串形式输入 URL 或本地文件路径。该字符串可以手动输入位置栏、从剪贴板获取或通过命令行参数传递。
当字符串不是有效的 URL 时,系统会根据各种假设进行最佳猜测。
如果字符串对应的是系统中的有效文件路径,则会使用QUrl::fromLocalFile() 构建一个 file:// URL。
如果不是这种情况,则会尝试将字符串转换为 http:// 或 ftp:// URL。如果字符串以 "ftp "开头,则使用后者。然后将结果传递给QUrl 的容忍解析器,如果成功,则返回有效的QUrl ,否则返回QUrl()。
例如
- qt-project.org 变成 http://qt-project.org
- ftp.qt-project.org变为 ftp://ftp.qt-project.org
- hostname 变成 http://hostname
- /home/user/test.html 变成 file:///home/user/test.html
为了能够处理相对路径,此方法需要一个可选的workingDirectory 路径。这在处理命令行参数时特别有用。如果workingDirectory 为空,则不会处理相对路径。
默认情况下,只有当文件确实存在于给定的工作目录中时,看起来像相对路径的输入字符串才会被视为相对路径。如果应用程序可以处理尚未存在的文件,则应在options 中传递标志AssumeLocalFile 。
bool QUrl::hasFragment() const
如果该 URL 包含片段(即在该 URL 上看到 #),则返回true
。
另请参阅 fragment() 和setFragment()。
bool QUrl::hasQuery() const
如果该 URL 包含查询(即在该 URL 上看到 ?),则返回true
。
另请参阅 setQuery()、query() 和hasFragment()。
QString QUrl::host(QUrl::ComponentFormattingOptions options = FullyDecoded) const
如果定义了 URL 的主机名,则返回主机名;否则返回空字符串。
options 参数控制主机名的格式。QUrl::EncodeUnicode 选项将使该函数以 ASCII 兼容编码(ACE)形式返回主机名,适合在非 8 位纯净或需要传统主机名的通道(如 DNS 请求或 HTTP 请求头)中使用。如果不存在该标志,该函数将根据允许的顶级域列表(参见idnWhitelist()) 以 Unicode 形式返回国际域名 (IDN)。
所有其他标志将被忽略。主机名不能包含控制字符或百分数字符,因此可以认为返回值已完全解码。
另请参阅 setHost()、idnWhitelist()、setIdnWhitelist() 和authority()。
[static]
QStringList QUrl::idnWhitelist()
返回允许在组成中使用非 ASCII 字符的顶级域的当前白名单。
有关该列表的基本原理,请参见setIdnWhitelist() 。
另请参见 setIdnWhitelist() 和AceProcessingOption 。
bool QUrl::isEmpty() const
如果 URL 没有数据,则返回true
;否则返回false
。
另请参阅 clear() 。
bool QUrl::isLocalFile() const
如果 URL 指向本地文件路径,则返回true
。如果方案为 "file",URL 就是本地文件路径。
请注意,即使最终文件路径无法用QFile::open() 打开,该函数也会将带有主机名的 URL 视为本地文件路径。
另请参阅 fromLocalFile() 和toLocalFile()。
bool QUrl::isParentOf(const QUrl &childUrl) const
如果此 URL 是childUrl 的父 URL,则返回true
。如果两个 URL 具有相同的方案和权限,且此 URL 的路径是childUrl 路径的父 URL,则childUrl 是此 URL 的子 URL。
bool QUrl::isRelative() const
如果 URL 是相对引用,则返回true
;否则返回false
。如果 URL 的方案未定义,则其为相对引用;因此,该函数等同于调用scheme().isEmpty().
RFC 3986 第 4.2 节定义了相对引用。
另请参见 Relative URLs vs Relative Paths 。
bool QUrl::isValid() const
如果 URL 是非空且有效,则返回true
;否则返回false
。
URL 将通过一致性测试。URL 的每个部分都必须符合 URI 标准的标准编码规则,URL 才能被报告为有效。
boolcheckUrl(constQUrl&url) {if(!url.isValid()) { qDebug("Invalid URL: %s", qUtf8Printable(url.toString())); return false; }return true; }
bool QUrl::matches(const QUrl &url, QUrl::FormattingOptions options) const
将options 应用于两个 URL 后,如果此 URL 和给定的url 相等,则返回true
;否则返回false
。
这等同于在两个 URL 上调用adjusted(options),然后比较结果 URL,但速度更快。
QString QUrl::password(QUrl::ComponentFormattingOptions options = FullyDecoded) const
如果定义了 URL 的密码,则返回该密码;否则返回空字符串。
options 参数控制用户名组件的格式。所有值都会产生一个无歧义的结果。使用QUrl::FullyDecoded 时,所有百分数编码序列都会被解码;否则,返回值可能包含某些控制序列的百分数编码序列,这些序列在QString 中无法以解码形式表示。
请注意,如果存在这些不可表示的序列,QUrl::FullyDecoded 可能会导致数据丢失。建议在非 URL 上下文中使用该值,如在QAuthenticator 中设置或协商登录。
另请参阅 setPassword() 。
QString QUrl::path(QUrl::ComponentFormattingOptions options = FullyDecoded) const
返回 URL 的路径。
qDebug()<<QUrl("file:file.txt").path();// "file.txt". qDebug() << QUrl("/home/user/file.txt").path(); // "/home/user/file.txt" qDebug() << QUrl("http://www.example.com/test/123").path(); // "/test/123"
options 参数控制路径组件的格式。所有值都会产生一个无歧义的结果。使用QUrl::FullyDecoded 时,所有百分数编码序列都会被解码;否则,返回值可能包含某些控制序列的百分数编码序列,这些序列在QString 中无法以解码形式表示。
请注意,如果存在这些不可表示的序列,QUrl::FullyDecoded 可能会导致数据丢失。当结果将用于非 URL 环境(如发送到 FTP 服务器)时,建议使用该值。
使用FullyDecoded (默认值)时,如果存在非 Unicode 百分比编码序列,就会造成数据丢失:
在这个例子中,由于%FF
无法转换,因此会有一定程度的数据丢失。
当路径包含子分隔符(如+
)时,也会出现数据丢失:
其他解码示例:
常量QUrlurl("/tmp/Mambo %235%3F.mp3"); qDebug() << url.path(QUrl::FullyDecoded); // "/tmp/Mambo #5?.mp3" qDebug() << url.path(QUrl::PrettyDecoded); // "/tmp/Mambo #5?.mp3" qDebug() << url.path(QUrl::FullyEncoded); // "/tmp/Mambo%20%235%3F.mp3"
另见 setPath().
int QUrl::port(int defaultPort = -1) const
返回 URL 的端口,如果未指定端口,则返回defaultPort 。
示例
QTcpSocket sock; sock.connectToHost(url.host(), url.port(80));
另请参阅 setPort().
QString QUrl::query(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
如果有查询字符串,则返回 URL 的查询字符串;如果没有,则返回空结果。要确定解析后的 URL 是否包含查询字符串,请使用hasQuery() 。
options 参数控制查询组件的格式。所有值都会产生一个明确的结果。使用QUrl::FullyDecoded 时,所有百分数编码序列都会被解码;否则,返回值可能包含某些控制序列的百分数编码序列,而这些控制序列在QString 中无法以解码形式表示。
请注意,不鼓励在查询中使用QUrl::FullyDecoded ,因为查询通常包含应保持百分数编码的数据,包括使用"%2B "序列表示加号字符('+')。
QUrl QUrl::resolved(const QUrl &relative) const
返回此 URL 与relative 的合并结果。此 URL 可作为将relative 转换为绝对 URL 的基础。
如果relative 不是相对 URL,该函数将直接返回relative 。否则,将合并两个 URL 的路径,返回的新 URL 具有基本 URL 的方案和权限,但路径是合并后的,如下例所示:
QUrlbaseUrl("http://qt.digia.com/Support/");QUrlrelativeUrl("../Product/Library/");qDebug(baseUrl.resolved(relativeUrl).toString()); // 打印 "http://qt.digia.com/Product/Library/"
使用"... "调用 resolved() 会返回一个QUrl ,其目录比原始目录高一级。同样,使用".../... "调用 resolved() 会从路径中移除两级。如果relative 为"/",则路径变为"/"。
另请参见 isRelative()。
QString QUrl::scheme() const
返回 URL 的方案。如果返回空字符串,则表示方案未定义,URL 是相对的。
方案只能包含 US-ASCII 字母或数字,即不能包含任何需要编码的字符。此外,方案总是以小写形式返回。
另请参阅 setScheme() 和isRelative()。
void QUrl::setAuthority(const QString &authority, QUrl::ParsingMode mode = TolerantMode)
将 URL 的权限设置为authority 。
URL 的权限是用户信息、主机名和端口的组合。所有这些元素都是可选的,因此空的授权也是有效的。
用户信息和主机之间用"@"分隔,主机和端口之间用": "分隔。如果用户信息为空,则必须省略"@";但如果端口为空,则允许使用杂散的":"。
下面的示例显示了一个有效的授权字符串:
authority 数据的解释与mode 相同:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode (默认设置)中,所有字符都接受未解码形式,容忍解析器将纠正未跟两个十六进制字符的游离'%'字符。
该函数不允许mode 成为QUrl::DecodedMode 。要设置完全解码的数据,请分别调用setUserName()、setPassword()、setHost() 和setPort() 。
另请参阅 authority()、setUserInfo()、setHost() 和setPort()。
void QUrl::setFragment(const QString &fragment, QUrl::ParsingMode mode = TolerantMode)
将 URL 的片段设置为fragment 。片段是 URL 的最后一部分,用 "#"表示,后面跟着一串字符。在 HTTP 中,它通常用于指向页面上的某个链接或点:
片段有时也被称为 URL "引用"。
传递 QString() 的参数(空QString )将取消设置片段。如果传递QString("") 的参数(空但非空的QString ),则会将片段设置为空字符串(就像原始 URL 有一个孤独的 "#")。
fragment 数据根据mode 进行解释:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode 中,接受所有未解码字符,容许解析器会纠正未跟两个十六进制字符的'%'字符。在DecodedMode 中,"%"代表字符本身,不允许使用编码字符。
QUrl::DecodedMode 在设置来自非 URL 数据源的片段或通过调用 () 和 格式化选项获得的片段时,应使用"......"。fragment QUrl::FullyDecoded
另请参阅 fragment() 和hasFragment()。
void QUrl::setHost(const QString &host, QUrl::ParsingMode mode = DecodedMode)
将 URL 的主机设置为host 。主机是权限的一部分。
host 数据根据mode 进行解释:在StrictMode 中,任何'%'字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode 中,接受所有未解码字符,容许解析器会纠正未跟两个十六进制字符的'%'字符。在DecodedMode 中,"%"代表字符本身,不能使用编码字符。
请注意,在任何情况下,解析结果都必须是符合 STD 3 规则的有效主机名,并经国际化资源标识符规范(RFC 3987)修改。不允许使用无效主机名,无效主机名将导致isValid() 变为 false。
另请参阅 host() 和setAuthority()。
[static]
void QUrl::setIdnWhitelist(const QStringList &list)
将允许在域中使用非 ASCII 字符的顶级域 (TLD) 白名单设置为list 。
请注意,如果调用此函数,需要在启动任何可能访问idnWhitelist() 的线程之前进行。
Qt XML 自带了一个默认列表,其中包含已公布支持国际化域名 (IDN) 的互联网顶级域,以及保证外观相似的字符(如拉丁语小写字母'a'
和西里尔字母等同,在大多数字体中视觉上完全相同)之间不会发生欺骗的规则。
该列表会随着注册商发布新规则而定期维护。
该功能是为需要操作列表以添加或删除 TLD 的用户提供的。不建议出于测试以外的目的更改其值,因为这样做可能会使用户面临安全风险。
另请参见 idnWhitelist()。
void QUrl::setPassword(const QString &password, QUrl::ParsingMode mode = DecodedMode)
将 URL 的密码设置为password 。如setUserInfo() 所述,password 是 URL 权限中用户信息元素的一部分。
password 数据根据mode 进行解释:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode 中,接受所有未解码字符,容许解析器会纠正未跟两个十六进制字符的'%'字符。在DecodedMode 中,"%"代表其本身,不能使用编码字符。
QUrl::DecodedMode 应在通过非 URL 数据源设置密码时使用,例如向用户显示的密码对话框,或通过调用 () 并使用 格式化选项获取的密码。password QUrl::FullyDecoded
另请参阅 password() 和setUserInfo()。
void QUrl::setPath(const QString &path, QUrl::ParsingMode mode = DecodedMode)
将 URL 的路径设置为path 。路径是 URL 中权限之后、查询字符串之前的部分。
对于非层次结构方案,路径将是方案声明之后的所有内容,如下例所示:
path 数据根据mode 进行解释:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode 中,接受所有未解码字符,容许解析器会纠正未跟两个十六进制字符的'%'字符。在DecodedMode 中,"%"代表字符本身,不能使用编码字符。
QUrl::DecodedMode 应在设置来自非 URL 数据源的路径时使用,如显示给用户的对话框或通过调用 () 并使用 格式化选项获得的路径。path QUrl::FullyDecoded
另请参阅 path() 。
void QUrl::setPort(int port)
将 URL 的端口设置为port 。如setAuthority() 所述,端口是 URL 授权的一部分。
port 必须在 0 至 65535 之间(含 65535)。端口设置为-1 表示端口未指定。
另请参阅 port()。
void QUrl::setQuery(const QString &query, QUrl::ParsingMode mode = TolerantMode)
将 URL 的查询字符串设置为query 。
如果需要传递不符合键值模式的查询字符串,或使用的特殊字符编码方案与QUrl 建议的不同,该函数将非常有用。
向query 传递 QString() 的值(空QString )会完全取消设置查询。但是,如果传递QString("") 的值,则会将查询设置为空值,就好像原始 URL 有一个孤零零的"? "一样。
query 数据的解释与mode 相同:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode 中,接受所有未解码字符,容许解析器会纠正未跟两个十六进制字符的'%'字符。在DecodedMode 中,"%"代表其本身,不能使用编码字符。
查询字符串通常包含百分比编码序列,因此不鼓励使用DecodedMode 。需要注意的一个特殊序列是加号字符('+')。QUrl 不会将空格转换为加号字符,尽管网页浏览器发布的 HTML 表单会将空格转换为加号字符。为了在查询中表示实际的加号字符,通常使用"%2B "序列。在TolerantMode 或StrictMode 中,该函数将不处理"%2B "序列。
void QUrl::setQuery(const QUrlQuery &query)
这是一个重载函数。
将 URL 的查询字符串设置为query 。
该函数从QUrlQuery 对象中重建查询字符串,并将其设置到QUrl 对象上。该函数没有解析参数,因为QUrlQuery 包含已解析的数据。
void QUrl::setScheme(const QString &scheme)
将 URL 的方案设置为scheme 。由于方案只能包含 ASCII 字符,因此不会对输入进行转换或解码。它还必须以 ASCII 字母开头。
方案描述了 URL 的类型(或协议)。它由 URL 开头的一个或多个 ASCII 字符表示。
方案严格遵守 RFC 3986 标准:scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
下面的示例显示了一个方案为 "ftp "的 URL:
要设置方案,需要使用以下调用:
QUrl url; url.setScheme("ftp");
方案也可以为空,在这种情况下,URL 将被解释为相对 URL。
另请参阅 scheme() 和isRelative()。
void QUrl::setUrl(const QString &url, QUrl::ParsingMode parsingMode = TolerantMode)
url QUrl 将自动对 URL 中不允许使用的所有字符进行百分比编码,并解码代表未保留字符(字母、数字、连字符、下划线、点和斜线)的百分比编码序列。所有其他字符均保持原样。
使用解析器模式parsingMode 解析url 。在TolerantMode (默认设置)中,QUrl 会纠正某些错误,特别是出现后面没有两个十六进制数字的百分号字符('%'),而且会接受任何位置的任何字符。在StrictMode 中,编码错误是不能容忍的,QUrl 也会检查某些禁止使用的字符是否以未编码的形式存在。如果在StrictMode 中检测到错误,isValid() 将返回 false。在这种情况下,解析模式DecodedMode 是不允许的,并会在运行时发出警告。
void QUrl::setUserInfo(const QString &userInfo, QUrl::ParsingMode mode = TolerantMode)
将 URL 的用户信息设置为userInfo 。如setAuthority() 所述,用户信息是 URL 权限的可选部分。
用户信息由用户名和密码(可选)组成,以": "分隔。如果密码为空,则必须省略冒号。下面的示例显示了一个有效的用户信息字符串:
userInfo 数据根据mode 进行解释:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode (默认设置)中,所有字符都接受未解码形式,容忍解析器将纠正未跟两个十六进制字符的游离'%'字符。
该函数不允许mode 成为QUrl::DecodedMode 。要设置完全解码的数据,请分别调用setUserName() 和setPassword() 。
另请参阅 userInfo()、setUserName()、setPassword() 和setAuthority()。
void QUrl::setUserName(const QString &userName, QUrl::ParsingMode mode = DecodedMode)
将 URL 的用户名设置为userName 。如setUserInfo() 所述,userName 是 URL 权限中用户信息元素的一部分。
userName 数据根据mode 进行解释:在StrictMode 中,任何"%"字符后面必须跟两个十六进制字符,某些字符(包括空格)不允许以未解码形式出现。在TolerantMode (默认设置)中,所有字符都以未解码形式被接受,容许解析器将纠正未跟两个十六进制字符的游离'%'字符。在DecodedMode 中,"%"代表字符本身,不能使用编码字符。
QUrl::DecodedMode 应在设置来自非 URL 数据源的用户名时使用,如显示给用户的密码对话框或通过调用 () 并使用 格式化选项获得的用户名。userName QUrl::FullyDecoded
另请参阅 userName() 和setUserInfo()。
[noexcept]
void QUrl::swap(QUrl &other)
将此 URL 与other 互换。该操作速度非常快,从未出现过故障。
[static, since 6.3]
QByteArray QUrl::toAce(const QString &domain, QUrl::AceProcessingOptions options = {})
返回给定域名的 ASCII 兼容编码domain 。输出结果可通过options 传递标志进行自定义。此函数的结果等同于domain 。
ASCII 兼容编码 (ACE) 由 RFC 3490、RFC 3491 和 RFC 3492 定义,并由 Unicode 技术标准 #46 更新。它是应用程序中域名国际化 (IDNA) 规范的一部分,允许使用非美国 ASCII 字符编写域名(如"example.com"
)。
如果domain 不是有效的主机名,该函数将返回空QByteArray 。特别要注意的是,IPv6 文字不是有效的域名。
此函数在 Qt 6.3 中引入。
CFURLRef QUrl::toCFURL() const
从QUrl 创建 CFURL。
调用者拥有 CFURL 并负责释放它。
QString QUrl::toDisplayString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const
返回 URL 的可显示字符串。输出结果可通过options 的标志进行自定义。选项RemovePassword 始终处于启用状态,因为密码不应显示给用户。
在默认选项下,生成的QString 可在稍后传回QUrl ,但最初存在的任何密码都将丢失。
另请参阅 FormattingOptions 、toEncoded() 和toString()。
QByteArray QUrl::toEncoded(QUrl::FormattingOptions options = FullyEncoded) const
如果 URL 有效,则返回 URL 的编码表示;否则返回空QByteArray 。可通过options 传递标志对输出进行自定义。
用户信息、路径和片段均转换为 UTF-8,然后对所有非 ASCII 字符进行百分数编码。主机名使用 Punycode 编码。
QString QUrl::toLocalFile() const
返回本地文件路径格式化的 URL 路径。返回的路径将使用正斜线,即使该路径最初是由带反斜线的路径创建的。
如果 URL 包含一个非空的主机名,返回值中将以 SMB 网络中的形式进行编码(例如,"//servername/path/to/file.txt")。
qDebug()<<QUrl("file:file.txt").toLocalFile();// "file.txt". qDebug() << QUrl("file:/home/user/file.txt").toLocalFile(); // "/home/user/file.txt" qDebug() << QUrl("file.txt").toLocalFile(); // ""; wasn't a local file as it had no scheme
注意:如果 URL 的路径组件包含非 UTF-8 二进制序列(如 %80),则此函数的行为未定义。
另请参阅 fromLocalFile() 和isLocalFile()。
NSURL *QUrl::toNSURL() const
从QUrl 创建一个 NSURL。
NSURL 会自动释放。
[static]
QByteArray QUrl::toPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray())
返回input 的编码副本。首先将input 转换为 UTF-8,然后对不在非保留组中的所有 ASCII 字符进行百分比编码。要防止字符被百分数编码,可将其发送至exclude 。要强制字符被百分数编码,可将其发送至include 。
未保留定义为ALPHA / DIGIT / "-" / "." / "_" / "~"
QByteArrayba=QUrl::toPercentEncoding("{a fishy string?}", "{}", "s");qDebug(ba.constData()); // 打印"{a fi%73hy %73tring%3F}"
QString QUrl::toString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const
返回 URL 的字符串表示。输出结果可通过options 传递标志进行定制。本函数不允许使用QUrl::FullyDecoded 选项,因为它会产生含糊不清的数据。
默认格式化选项是PrettyDecoded 。
另请参见 FormattingOptions,url() 和setUrl()。
[static]
QStringList QUrl::toStringList(const QList<QUrl> &urls, QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded))
使用toString(options) 将urls 列表转换为QString 对象列表。
QString QUrl::url(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const
返回 URL 的字符串表示。输出结果可通过options 传递标志进行定制。该函数不允许使用QUrl::FullyDecoded 选项,因为它会产生含糊不清的数据。
与toString (选项)同义。
另请参阅 setUrl(),FormattingOptions,toEncoded() 和toString() 。
QString QUrl::userInfo(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
返回 URL 的用户信息,如果用户信息未定义,则返回空字符串。
该函数返回一个明确的值,其中可能包含仍按百分比编码的字符,以及一些在QString 中无法以解码形式表示的控制序列。
options 参数控制用户信息组件的格式。本函数不允许使用QUrl::FullyDecoded 的值。如果需要获取完全解码的数据,请分别调用userName() 和password() 。
另请参阅 setUserInfo()、userName()、password() 和authority()。
QString QUrl::userName(QUrl::ComponentFormattingOptions options = FullyDecoded) const
如果已定义用户名,则返回 URL 的用户名;否则返回空字符串。
options 参数控制用户名组件的格式。所有值都会产生一个无歧义的结果。使用QUrl::FullyDecoded 时,所有百分数编码序列都会被解码;否则,返回值可能包含某些控制序列的百分数编码序列,这些序列在QString 中无法以解码形式表示。
请注意,如果存在这些不可表示的序列,QUrl::FullyDecoded 可能会导致数据丢失。建议在非 URL 上下文中使用该值,如在QAuthenticator 中设置或协商登录。
另请参阅 setUserName() 和userInfo()。
[noexcept]
QUrl &QUrl::operator=(QUrl &&other)
Move-assignsother 到此QUrl 实例。
QUrl &QUrl::operator=(const QString &url)
为该对象指定url 。
[noexcept]
QUrl &QUrl::operator=(const QUrl &url)
将指定的url 指派给此对象。
相关非成员
[noexcept]
bool operator!=(const QUrl &lhs, const QUrl &rhs)
如果lhs 和rhs URL 不相等,则返回true
;否则返回false
。
另请参阅 matches() 。
QDataStream &operator<<(QDataStream &out, const QUrl &url)
将 urlurl 写入数据流out ,并返回该数据流的引用。
另请参阅 QDataStream 操作符的格式。
[noexcept]
bool operator==(const QUrl &lhs, const QUrl &rhs)
如果lhs 和rhs URL 相同,则返回true
;否则返回false
。
另请参阅 matches() 。
QDataStream &operator>>(QDataStream &in, QUrl &url)
从数据流in 将 url 读入url ,并返回对该数据流的引用。
另请参阅 QDataStream 操作符的格式。
宏文档
QT_NO_URL_CAST_FROM_STRING
禁止从QString (或 char *)到QUrl 的自动转换。
如果您有大量使用QString 作为文件名的代码,而您希望将其转换为使用QUrl 作为网络透明度的代码,那么使用此定义编译代码将非常有用。在任何使用QUrl 的代码中,它都可以帮助避免遗漏QUrl::resolved() 调用,以及其他从QString 到QUrl 的错误转换。
例如
url = filename; // probably not what you want
的代码,可以将其重写为
另请参见 QT_NO_CAST_FROM_ASCII 。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.