QUrl类

QUrl类提供了一个方便的接口,用于处理URL。 更多...

头文件 #include <QUrl>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意:此类中所有函数都是重入的。

公共类型

(自6.3起) enumAceProcessingOption { IgnoreIDNWhitelist, AceTransitionalProcessing }
flagsAceProcessingOptions
enumComponentFormattingOption { PrettyDecoded, EncodeSpaces, EncodeUnicode, EncodeDelimiters, EncodeReserved, …, FullyDecoded }
flagsComponentFormattingOptions
flagsFormattingOptions
enumParsingMode { TolerantMode, StrictMode, DecodedMode }
enumUrlFormattingOption { None, RemoveScheme, RemovePassword, RemoveUserInfo, RemovePort, …, NormalizePathSegments }
enumUserInputResolutionOption { DefaultResolution, AssumeLocalFile }
flagsUserInputResolutionOptions

公共函数

QUrl()
QUrl(const QString &url, QUrl::ParsingMode parsingMode = TolerantMode)
QUrl(const QUrl &other)
QUrl(QUrl &&other)
~QUrl()
QUrladjusted(QUrl::FormattingOptions options) const
QStringauthority(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
voidclear()
QStringerrorString() const
QStringfileName(QUrl::ComponentFormattingOptions options = FullyDecoded) const
QStringfragment(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
boolhasFragment() const
boolhasQuery() const
QStringhost(QUrl::ComponentFormattingOptions options = FullyDecoded) const
boolisEmpty() const
boolisLocalFile() const
boolisParentOf(const QUrl &childUrl) const
boolisRelative() const
boolisValid() const
boolmatches(const QUrl &url, QUrl::FormattingOptions options) const
QStringpassword(QUrl::ComponentFormattingOptions options = FullyDecoded) const
QStringpath(QUrl::ComponentFormattingOptions options = FullyDecoded) const
intport(int defaultPort = -1) const
QStringquery(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
QUrlresolved(const QUrl &relative) const
QStringscheme() const
voidsetAuthority(const QString &authority, QUrl::ParsingMode mode = TolerantMode)
voidsetFragment(const QString &fragment, QUrl::ParsingMode mode = TolerantMode)
voidsetHost(const QString &host, QUrl::ParsingMode mode = DecodedMode)
voidsetPassword(const QString &password, QUrl::ParsingMode mode = DecodedMode)
voidsetPath(const QString &path, QUrl::ParsingMode mode = DecodedMode)
voidsetPort(int port)
voidsetQuery(const QString &query, QUrl::ParsingMode mode = TolerantMode)
voidsetQuery(const QUrlQuery &query)
voidsetScheme(const QString &scheme)
voidsetUrl(const QString &url, QUrl::ParsingMode parsingMode = TolerantMode)
voidsetUserInfo(const QString &userInfo, QUrl::ParsingMode mode = TolerantMode)
voidsetUserName(const QString &userName, QUrl::ParsingMode mode = DecodedMode)
voidswap(QUrl &other)
CFURLReftoCFURL() const
QStringtoDisplayString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const
QByteArraytoEncoded(QUrl::FormattingOptions options = FullyEncoded) const
QStringtoLocalFile() const
NSURL *toNSURL() const
QStringtoString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const
QStringurl(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const
QStringuserInfo(QUrl::ComponentFormattingOptions options = PrettyDecoded) const
QStringuserName(QUrl::ComponentFormattingOptions options = FullyDecoded) const
booloperator!=(const QUrl &url) const
QUrl &operator=(const QUrl &url)
QUrl &operator=(const QString &url)
QUrl &operator=(QUrl &&other)
booloperator==(const QUrl &url) const

静态公有成员

(自6.3起) QStringfromAce(const QByteArray &domain, QUrl::AceProcessingOptions options = {})
QUrlfromCFURL(CFURLRef url)
QUrlfromEncoded(QByteArrayView input, QUrl::ParsingMode mode = TolerantMode)
QUrlfromLocalFile(const QString &localFile)
QUrlfromNSURL(const NSURL *url)
QStringfromPercentEncoding(const QByteArray &input)
QList<QUrl>fromStringList(const QStringList &urls, QUrl::ParsingMode mode = TolerantMode)
QUrlfromUserInput(const QString &userInput, const QString &workingDirectory = QString(), QUrl::UserInputResolutionOptions options = DefaultResolution)
QStringListidnWhitelist()
voidsetIdnWhitelist
(自6.3起) QByteArraytoAce(const QString &domain, QUrl::AceProcessingOptions options = {})
QByteArraytoPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray())
QStringListtoStringList(const QList<QUrl> &urls, QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded))
QDataStream &operator<<(QDataStream &out, const QUrl &url)
QDataStream &operator>>(QDataStream &in, QUrl &url)

详细描述

它可以解析和构建编码或未编码形式的URL。QUrl还支持国际化域名(IDN)。

使用QUrl最常见的方式是通过构造函数以包含完整URL的QString初始化它。QUrl对象也可以通过使用QUrl::fromEncoded()从包含完整URL的QByteArray创建,或者通过使用QUrl::fromUserInput()从不完全的URL以启发式方式创建。可以通过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" 发送到服务器。

可以通过调用setScheme()、setUserName()、setPassword()、setHost()、setPort()、setPath()、setQuery()和setFragment()逐步构建URL。还有一些便利函数也可用: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()()返回的编码形式是为了内部使用,传给Web服务器、邮件客户端等。两种形式在技术上都是正确的,并且确切地表示了同一个URL——实际上,通过将这两种形式之一的任一种传递给QUrl的构造函数或setUrl()()将得到同一个QUrl对象。

QUrl遵循RFC 3986(统一资源标识符:通用语法)规范,并包括来自RFC 1738(统一资源定位符)的方案扩展。QUrl中的大小写折叠规则符合RFC 3491(Nameprep:国际域名(IDN)的Stringprep配置文件)。它还与freesedesktop.org的文件URI规范兼容,前提是区域设置使用UTF-8(由IDN要求)对文件名进行编码。

相对URL与相对路径

调用isRelative()将返回URL是否为相对的。相对URL没有方案。例如

    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可以是绝对的,同时包含相对路径,反之亦然

    // Absolute URL, relative path
    QUrl url("file:file.txt");
    qDebug() << url.isRelative();                 // false: has "file" scheme
    qDebug() << QDir::isAbsolutePath(url.path()); // false: relative path

    // Relative URL, absolute path
    url = QUrl("/home/user/file.txt");
    qDebug() << url.isRelative();                 // true: has no scheme
    qDebug() << QDir::isAbsolutePath(url.path()); // true: absolute path

可以通过将它们作为resolved()()的参数传递来解析相对URL,该函数返回一个绝对URL。isParentOf()用于确定一个URL是否是另一个URL的父级。

错误检查

在解析或在单个setter方法(如setScheme(), setHost() 或 setPath()())中设置URL组件时,QUrl能够检测到许多错误。如果解析或setter函数成功,则之前记录的错误条件将被丢弃。

默认情况下,QUrl setter方法在QUrl::TolerantMode下操作,这意味着它们接受一些常见的错误和数据错误表示。另一种解析方法是QUrl::StrictMode,它将进一步检查。有关解析模式差异的说明,请参阅QUrl::ParsingMode

QUrl只检查URL规范的一致性。它不会尝试验证高级协议URL是否与在其他地方处理程序的预期格式相符合。例如,以下URI都被QUrl视为有效,即使在使用时它们没有意义:

  • "http:/filename.html"
  • "mailto://example.com"

当解析器遇到错误时,它通过使isValid()返回false以及toString() / toEncoded()返回空字符串来发出事件信号。如果需要向用户显示URL解析失败的原因,可以从QUrl中通过调用errorString()来获取错误条件。请注意,这条信息非常技术化,可能对最终用户来说并不容易理解。

QUrl能够记录的只有一个错误条件。如果发现多个错误,则报告哪个错误是未定义的。

字符转换

遵循以下规则以在处理URL和字符串时避免错误的字符转换

成员类型文档

[自6.3版本起]枚举 QUrl::AceProcessingOption
标志 QUrl::AceProcessingOptions

Ace处理选项控制URL以ASCII兼容编码转换的方式。

常量描述
QUrl::IgnoreIDNWhitelist0x1在将URL转换为Unicode时忽略IDN白名单。
QUrl::AceTransitionalProcessing0x2使用UTS #46中描述的过渡处理。这允许与IDNA 2003规范有更好的兼容性。

默认情况下使用非过渡处理,并且只允许IDN白名单中列出的顶级域名内的URL中的非ASCII字符。

此枚举是在Qt 6.3中引入的。

AceProcessingOptions类型是QFlags<AceProcessingOption>的typedef。它存储AceProcessingOption值的或组合。

也见toAce(),fromAce(),和idnWhitelist

枚举 QUrl::ComponentFormattingOption
标志 QUrl::ComponentFormattingOptions

组件格式化选项定义了当URL以文本形式写入时其组件的格式。它们可以与QUrl::FormattingOptions中的选项结合使用,在toString()和toEncoded()中使用。

常量描述
QUrl::PrettyDecoded0x000000组件以“整洁形式”返回,大多数百分编码字符已解码。PrettyDecoded的确切行为因组件而异,并且可能随着Qt版本的变化而变化。这是默认值。
QUrl::EncodeSpaces0x100000将空格字符保留为其编码形式("%20")。
QUrl::EncodeUnicode0x200000将非-US-ASCII字符保留为其UTF-8百分编码形式(例如,"%C3%A9"代表U+00E9代码点,拉丁小写字母E带重音符号)。
QUrl::EncodeDelimiters0x400000 | 0x800000保留某些分隔符的编码形式,就像当完整URL作为文本表示时出现在URL中一样。分隔符受此选项从组件到组件的影响。此标志在toString()或toEncoded()中没有效果。
QUrl::EncodeReserved0x1000000保留不符合URL规范中URL的指定不允许出现的US-ASCII字符。这是toString()和toEncoded()中的默认值。
QUrl::DecodeReserved0x2000000解码URL规范不允许出现在URL中的US-ASCII字符。这是个体组件获取器的默认值。
QUrl::FullyEncodedEncodeSpaces | EncodeUnicode | EncodeDelimiters | EncodeReserved保留所有字符的适当编码形式,就像此组件作为URL的一部分出现一样。当与toString()一起使用时,这会产生一个完全符合规范的QString形式的URL,与toEncoded()的结果完全相同
QUrl::FullyDecodedFullyEncoded | DecodeReserved | 0x4000000尽可能进行解码。对于URL的各个组件,此操作将解码每个百分编码序列,包括控制字符(U+0000到U+001F)和以百分编码形式找到的UTF-8序列。使用此模式可能会造成数据丢失,有关更多信息,请参见下文。

不应在单个调用中使用EncodeReserved和DecodeReserved的值。如果发生这种情况,行为是未定义的。它们作为单独的值提供,因为关于保留字符的“整洁模式”在某些组件中的行为以及完整URL的特殊行为不同。

全文解码

FullDecoded模式与Qt 4.x中返回QString的函数的行为类似,即每个字符代表自身,永远不具有任何特殊含义。即使是百分号字符('%'),应解释为字面上的百分号,而不是百分号编码序列的开始。在其他所有解码模式中,相同的实际字符均表示为"%25"序列。

每次将QUrl::FullyDecoded获取的数据重新应用于QUrl时,必须注意到使用设置器(如setPath()和setUserName())的QUrl::DecodedMode参数。否则,可能会导致将百分号字符('%')重新解释为百分号编码序列的开始。

当URL的部分不在URL环境中使用时,此模式非常有用。例如,在FTP客户端应用程序中提取用户名、密码或文件路径时,应使用FullDecoded模式。

此模式应谨慎使用,因为有两个条件无法在返回的QString中可靠地表示。它们是

  • 非UTF-8序列:URL可能包含不构成有效UTF-8序列的百分号编码字符序列。由于URL需要使用UTF-8进行解码,任何解码失败都将在存在序列的地方使QString包含一个或多个替换字符。
  • 编码分隔符:URL还可以区分其文本形式中找到的分隔符与其百分号编码形式等效的形式。这在查询中最常见,但也被大多数URL的其余部分所允许。

以下示例说明了这个问题

    QUrl original("http://example.com/?q=a%2B%3Db%26c");
    QUrl copy(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,则Web服务器可能会进行不同的解释。在第一种情况下,它将被解释为一个参数,键为"q",值为"a+=b&c"。在第二种情况下,它可能会解释为两个参数,一个键为"q",值为"a =b",另一个键为"c"且没有值。

ComponentFormattingOptions类型是QFlags<ComponentFormattingOption>的类型别名。它存储了ComponentFormattingOption值的或组合。

另请参阅QUrl::FormattingOptions

enum QUrl::ParsingMode

解析模式控制QUrl解析字符串的方式。

常量描述
QUrl::TolerantMode0QUrl将尝试纠正URL中的一些常见错误。此模式对于解析来自不知何为严格符合标准的源头的URL非常有用。
QUrl::StrictMode1只接受有效URL。此模式对于通常的URL验证非常有用。
QUrl::DecodedMode2QUrl将按完整解码形式解释URL组件,其中百分号字符代表自身,而非百分号编码序列的开始。此模式仅对设置URL组件的设置器有效;不允许在QUrl构造函数、fromEncoded()或setUrl()中使用。有关此模式的更多信息,请参阅QUrl::FullyDecoded的文档。

在TolerantMode中,解析器具有以下行为

  • 空格和"%20":将接受未编码的空格字符,并将将其处理为"%20"等效。
  • 单个"%"字符:任何不紧接在两个十六进制字符之后的百分号字符"%"(例如"13% coverage.html")将被替换为"%25"。请注意,单独的"%"字符将触发所有百分号的修正模式。
  • 预留和非预留字符:编码后的URL应仅包含少数字符作为字面量;其他所有字符都应该进行百分号编码。在TolerantMode模式下,如果这些字符出现在URL中,将接受这些字符:空格 / 双引号 / "<" / ">" / "" / "^" / "`" / "{" / "|" / "}"。可以通过将QUrl::DecodeReserved传递给toString()或toEncoded()来再次解码这些字符。在各个组件的getters中,这些字符通常以解码形式返回。

在StrictMode模式下,如果发现解析错误,isValid()将返回false,而errorString()将返回描述错误的消息。如果检测到多个错误,哪个错误被报告是未定义的。

请注意,TolerantMode通常不足以解析用户输入,因为用户输入通常包含比解析器能处理的更多错误和期望。当处理直接来自用户的数据时(与来自数据传输源的数据,如其他程序的数据相反),建议使用fromUserInput()。

另请参阅fromUserInput(), setUrl(), toString(), toEncoded(),以及QUrl::FormattingOptions

enum QUrl::UrlFormattingOption
flags QUrl::FormattingOptions

格式化选项定义了将URL格式化为文本时如何格式化。

常量描述
QUrl::None0x0URL的格式保持不变。
QUrl::RemoveScheme0x1从URL中移除方案。
QUrl::RemovePassword0x2从URL中移除任何密码。
QUrl::RemoveUserInfoRemovePassword | 0x4从URL中移除任何用户信息。
QUrl::RemovePort0x8从URL中移除指定的端口。
QUrl::RemoveAuthorityRemoveUserInfo | RemovePort | 0x10 
QUrl::RemovePath0x20移除URL的路径,仅留下方案、主机地址和端口(如果存在)。
QUrl::RemoveQuery0x40移除URL的查询部分(跟随"?"字符)。
QUrl::RemoveFragment0x80 
QUrl::RemoveFilename0x800移除文件名(即路径中最后一个'/'之后的所有内容)。如果设置了StripTrailingSlash,则保留尾随的'/'。仅在RemovePath未设置时有效。
QUrl::PreferLocalFile0x200如果根据isLocalFile(),URL是本地文件且不包含查询或片段,将返回本地文件路径。
QUrl::StripTrailingSlash0x400如果路径中存在尾随斜杠,则从路径中移除。
QUrl::NormalizePathSegments0x1000修改路径以移除多余的目录分隔符,并尽量解析"."和".."。对于非本地路径,保留相邻的斜杠。

注意,Nameprep中的大小写折叠规则,QUrl遵循该规则,要求主机名始终转换为小写,而不管使用哪种Qt::FormattingOptions。

QUrl::ComponentFormattingOptions中的选项也是可能的。

FormattingOptions类型是QFlags<UrlFormattingOption>的typedef。它存储了UrlFormattingOption值的OR组合。

参见QUrl::ComponentFormattingOptions

enum QUrl::UserInputResolutionOption
标志 QUrl::UserInputResolutionOptions

用户输入解析选项定义如何 从UserInput() 解析字符串,这些字符串可以是相对路径或 HTTP URL 的简写形式。例如 file.pl 既可以是本地文件,也可以是 URL http://file.pl

常量描述
QUrl::DefaultResolution0默认解析机制是检查给 fromUserInput 的工作目录中是否存在本地文件,并且在这种情况下只返回本地路径。否则假设是一个 URL。
QUrl::AssumeLocalFile1此选项会使 fromUserInput() 始终返回本地路径,除非输入包含方案,如 http://file.pl。这对于能够创建文件的文本编辑器等应用非常有用。

UserInputResolutionOptions 类型是 QFlags 的 typedef。它存储了 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()

QUrl url = QUrl::fromEncoded("http://qt-project.org/List%20of%20holidays.xml");

这两个函数是等价的,并且在 Qt 5 中,这两个函数都接受编码数据。通常,QUrl 构造函数或 setUrl() 与 fromEncoded() 的选择将取决于源数据:构造函数和 setUrl() 接收一个 QString,而 fromEncoded 接收一个 QByteArray

另请参阅setUrlfromEncodedTolerantMode

[noexcept] QUrl::QUrl(const QUrl &other)

构造一个other的副本。

[noexcept] QUrl::QUrl(QUrl &&other)

移动构造一个QUrl实例,使其指向other所指向的同一对象。

[noexcept] QUrl::~QUrl()

析构函数;在object对象被删除之前立即调用。

QUrl QUrl::adjusted(QUrl::FormattingOptions options) const

返回URL的调整版本。通过传递带有options的标志来自定义输出。

QUrl::ComponentFormattingOption的编码选项对于此方法没有太多意义,QUrl::PreferLocalFile也是如此。

此操作始终等同于QUrl(url.toString(options))。

另请参阅格式化选项toEncoded()和toString()。

QString QUrl::authority(QUrl::ComponentFormattingOptions options = PrettyDecoded) const

如果定义了URL的权限,则返回URL的权限;否则返回空字符串。

此函数返回一个无歧义值,可能包含仍使用百分号编码的字符以及一些在QString解码形式中不可表示的控制序列。

options参数控制如何格式化用户信息组件。此函数不允许使用QUrl::FullyDecoded的值。如果需要获取完全解码的数据,请分别调用userName()、password()、host()和port()。

另请参阅setAuthority()、userInfo()、userName()、password()、host()和port()。

void QUrl::clear()

重置QUrl的内容。调用此函数后,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

[静态,自6.3以来] QString QUrl::fromAce(const QByteArray &domain, QUrl::AceProcessingOptions options = {})

返回给定经过ASCII兼容编码(ACE)编码的域名domain的Unicode形式。可以通过传递options中的标志来自定义输出。此函数的返回值被认为是与domain等效。

如果domain中的值无法编码,它将转换为QString并返回。

ASCII兼容编码(ACE)由RFC 3490、RFC 3491和RFC 3492定义,并由Unicode技术标准#46更新。它是国际域名应用程序(IDNA)规范的一部分,该规范允许使用非US-ASCII字符书写域名(如"example.com")。

此函数是在Qt 6.3中引入的。

[静态] QUrl QUrl::fromCFURL(CFURLRef url)

构造一个包含CFURL url副本的QUrl

[静态] 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 兼容。

另请参阅:toEncoded() 和 setUrl

[静态] QUrl QUrl::fromLocalFile(const QString &localFile)

返回将 localFile 解释为本地文件表示的 QUrl。此函数接受由斜杠分隔的路径以及此平台的原生分隔符。

此函数还接受以双斜杠开头的路径(或反斜杠)以指示远程文件,如 "//servername/path/to/file.txt"。请注意,仅某些平台可以使用 QFile::open() 打开此类文件。

一个空的 localFile 导致一个空的 URL(自 Qt 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 才有意义。

    QUrl url = QUrl::fromLocalFile("file.txt");
    QUrl baseUrl = QUrl("file:/home/user/");
    // wrong: prints QUrl("file:file.txt"), as url already has a scheme
    qDebug() << baseUrl.resolved(url);

要解析此类 URL,必须先将方案移除。

    // correct: prints QUrl("file:///home/user/file.txt")
    url.setScheme(QString());
    qDebug() << baseUrl.resolved(url);

因此,对于相对文件路径而言,使用没有方案的相对 URL 会更好。

    QUrl url = QUrl("file.txt");
    QUrl baseUrl = QUrl("file:/home/user/");
    // prints QUrl("file:///home/user/file.txt")
    qDebug() << baseUrl.resolved(url);

另请参阅:toLocalFile()、isLocalFile() 和 QDir::toNativeSeparators

[静态] QUrl QUrl::fromNSURL(const NSURL *url)

创建包含 NSURL url 副本的 QUrl

[静态] QString QUrl::fromPercentEncoding(const QByteArray &input)

返回 input 的解码副本。首先将 input 从百分号编码中解码,然后将其从 UTF-8 转换为 Unicode。

注意:对于无效的输入(例如包含非有效十六进制数的字符串模式 "%G5"),输出同样会无效。例如,序列 "%G5" 可解码为 'W'。

[静态] QList<QUrl> QUrl::fromStringList(const QStringList &urls, QUrl::ParsingMode mode = TolerantMode)

此函数将代表URL的字符串列表转换为URL列表,使用QUrl(str, mode)。请注意,这意味着所有字符串都必须是URL,而不是例如本地路径。

[静态] 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包含一个片段(即,如果在它上面看到了#),则返回true

另请参阅fragment()和setFragment()。

bool QUrl::hasQuery() const

如果此URL包含查询(即,如果在它上面看到了?),则返回true

另请参阅setQuery()、query()和hasFragment()。

QString QUrl::host(QUrl::ComponentFormattingOptions options = FullyDecoded) const

如果URL定义了主机,则返回URL的主机地址;否则返回空字符串。

参数options控制主机名的格式。选项QUrl::EncodeUnicode将导致此函数以ASCII兼容编码(ACE)形式返回主机名,适用于不使用8位编码的通道或需要传统主机名(如DNS请求或HTTP请求头)的通道。如果没有设置该标志,则此函数将根据允许顶级域名列表(请参阅idnWhitelist())以Unicode形式返回国际域名名称(IDN)。

其他所有标志都被忽略。主机名不能包含控制符或百分号字符,因此返回的值可以认为是完全解码的。

另请参阅setHost(),idnWhitelist(),setIdnWhitelist()和authority()。

[静态] QStringList QUrl::idnWhitelist()

返回当前允许其组成包含非ASCII字符的最高级域名的白名单。

有关此列表的理由,请参阅setIdnWhitelist()。

另请参阅setIdnWhitelist()和AceProcessingOption

bool QUrl::isEmpty() const

如果URL没有数据,则返回true;否则返回false

另请参阅clear()。

bool QUrl::isLocalFile() const

如果此URL指向本地文件路径,则返回true。如果方案是"文件",则URL是本地文件路径。

请注意,此函数认为具有主机名的URL是本地文件路径,即使最终的文件路径不能用QFile::open()。

另请参阅fromLocalFile()和toLocalFile()。

bool QUrl::isParentOf(const QUrl &childUrl) const

如果此URL是childUrl的父URL,则返回true。如果两个URL共享相同的方案和授权,并且此URL的路径是childUrl路径的父路径,则childUrl是此URL的子路径。

bool QUrl::isRelative() const

如果URL是相对的,则返回true;否则返回false。如果URL的方案未定义,则它是相对引用;因此,此函数等价于调用scheme()isEmpty()。

相对引用在RFC 3986第4.2节中定义。

另请参阅相对URL与相对路径

bool QUrl::isValid() const

如果URL非空且有效,则返回true;否则返回false

URL经过符合性测试。URL的每一部分都必须符合URI标准的编码规则,才能报告为有效。

bool checkUrl(const QUrl &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相等,则返回true;否则返回false

这相当于在两个URL上调用adjusted(options)并比较结果,但速度更快。

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服务器。

数据丢失的一个例子是,当您有非Unicode的百分编码序列并使用FullyDecoded(默认值)时

    qDebug() << QUrl("/foo%FFbar").path();

在此示例中,将会有一定程度的数据丢失,因为%FF无法转换。

路径包含子定界符(例如+)时也会发生数据丢失

    qDebug() << QUrl("/foo+bar%2B").path(); // "/foo+bar+"

其他解码示例

    const QUrl url("/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的端口号;否则返回默认端口号。

示例

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" 序列来表示加号字符 ('+')。

另请参阅setQuery() 和 hasQuery()。

QUrl QUrl::resolved(const QUrl &relative) const

返回此 URL 与 relative 合并的结果。此 URL 用作基础将 relative 转换为绝对 URL。

如果 relative 不是一个相对 URL,此函数将直接返回 relative。否则,合并两个 URL 的路径,新返回的 URL 具有基础 URL 的协议和权限,但有合并后的路径,如下面的例子所示

QUrl baseUrl("http://qt.digia.com/Support/");
QUrl relativeUrl("../Product/Library/");
qDebug(baseUrl.resolved(relativeUrl).toString());
// prints "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 的权限是用户信息、主机名和端口的组合。所有这些元素都是可选的;因此,空权限是有效的。

用户信息和主机名通过 '@' 分隔,主机名和端口通过 ':' 分隔。如果用户信息为空,'@' 必须省略;如果端口为空,那么允许存在多余的 ':'。

以下示例展示了一个有效的权限字符串

根据 mode 解释 authority 数据:在 StrictMode 中,任何 '%' 字符之后必须紧跟恰好两个十六进制字符,并且在解码形式中不允许某些字符(包括空格)存在。在 TolerantMode(默认模式)中,接受所有字符的未解码形式,并允许将随机出现的未跟有两个十六进制字符的 '%' 进行纠正。

此函数不允许 模式QUrl::DecodedMode。要设置完全解码的数据,请分别调用setUserName()、setPassword()、setHost() 和 setPort()。

另见authority()、setUserInfo()、setHost() 和 setPort

void QUrl::setFragment(const QString &fragment, QUrl::ParsingMode mode = TolerantMode)

将 URL 的片段设置为 片段。片段是 URL 的最后一部分,由一个 # 符号后跟一串字符表示。它通常用于 HTTP 中指明某个链接或页面上的某个点。

片段有时也被称为 URL 的“引用”。

传递一个 QString()(一个空的QString)参数将取消片段。传递一个QString("")(一个非空的QString)参数将片段设置为空字符串(就像原始 URL 中只有一个 "#" 一样)。

片段 数据的解析将根据 模式 进行:在 StrictMode 中,任何 "%" 字符都必须由恰好两个十六进制字符后跟,且某些字符(包括空格)在未解码形式中是不允许的。在 TolerantMode 中,所有字符都以未解码形式接受,并且容错解析器会纠正不跟随两个十六进制字符的孤立 "%"。在 DecodedMode 中,"%" 代表自身,并且不可能有编码的字符。

当从非 URL 数据源设置片段,或通过调用fragment() 并使用QUrl::FullyDecoded 格式化选项获取片段时,应该使用 QUrl::DecodedMode

另见fragment() 和 hasFragment

void QUrl::setHost(const QString &host, QUrl::ParsingMode mode = DecodedMode)

将 URL 的主机设置为 主机。主机是授权的一部分。

主机 的数据将根据 模式 进行解析:在 StrictMode 中,任何 "%" 字符都必须由恰好两个十六进制字符后跟,且某些字符(包括空格)在未解码形式中是不允许的。在 TolerantMode 中,所有字符都以未解码形式接受,并且容错解析器会纠正不跟随两个十六进制字符的孤立 "%"。在 DecodedMode 中,"%" 代表自身,并且不可能有编码的字符。

请注意,在所有情况下,解析的结果都必须是 STD 3 规则下有效的主机名,如国际资源标识符规范(RFC 3987)所修改的。不允许无效的主机名,这会导致isValid() 转为 false。

另见host() 和 setAuthority

[静态] void QUrl::setIdnWhitelist(const QStringList &list)

将允许在域名中包含非ASCII字符的一级域(TLDs)的白名单设置为list的值。

请注意,如果调用此函数,需要在开始任何可能访问idnWhitelist()的线程之前调用它。

Qt附带了一个默认列表,其中包含已经公布支持国际域名(INT)的互联网一级域,并确保类似外观的字符(如拉丁字母小写的'a'和西里尔等价字符,在大多数字体中都是视觉上相同的)之间不会发生欺骗。

该列表定期维护,因为注册商发布新规则。

此函数提供供需要操作列表,以便添加或删除TLD的人使用。不推荐出于测试以外的目的更改其值,因为这可能会使用户面临安全风险。

另请参阅 idnWhitelist

void QUrl::setPassword(const QString &password, QUrl::ParsingMode mode = DecodedMode)

设置URL的密码为password。密码是URL权限中的用户信息元素的一部分,如setUserInfo()中所述。

password数据根据mode进行解析:在StrictMode中,每个'%'字符后面必须紧跟两个十六进制字符,有些字符(包括空格)以未解码形式不允许。在TolerantMode中,接受所有字符以未解码形式,宽容解析器将纠正未紧跟两个十六进制字符的孤'%'. 在DecodedMode中,'%'代表自己,并且不允许编码字符。

从非URL的数据源设置密码时应该使用QUrl::DecodedMode,例如向用户提供密码对话框或通过以QUrl::FullyDecoded格式化选项调用password()获取的密码。

另请参阅 password()和setUserInfo

void QUrl::setPath(const QString &path, QUrl::ParsingMode mode = DecodedMode)

将URL的路径设置为path。路径是Authority之后、查询字符串之前的URL的一部分。

对于非分层方案,路径将是方案声明之后的所有内容,如下例所示

path数据根据mode进行解析:在StrictMode中,每个'%'字符后面必须紧跟两个十六进制字符,有些字符(包括空格)以未解码形式不允许。在TolerantMode中,接受所有字符以未解码形式,宽容解析器将纠正未紧跟两个十六进制字符的孤'%'. 在DecodedMode中,'%'代表自己,并且不允许编码字符。

当从非URL数据源设置路径时,例如向用户显示的对话框或通过调用 path() 并使用 QUrl::FullyDecoded 格式化选项获得路径时,应使用 QUrl::DecodedMode

另请参阅path

void QUrl::setPort(int port)

将URL的端口号设置为port。端口号是URL权限的一部分,如setAuthority()中所描述。

port必须在0到65535之间,包括这两个数。将端口号设置为-1表示端口号未指定。

另请参阅port().

void QUrl::setQuery(const QString &query, QUrl::ParsingMode mode = TolerantMode)

将URL的查询字符串设置为query

如果您需要传递不适合键值模式或使用与QUrl建议不同的方案对特殊字符进行编码的查询字符串,则此函数很有用。

将QString()(一个空的QString)传递给query将完全取消查询。但是,传递QString("")将使查询成为一个空值,就像原始URL有一个单独的"?"一样。

根据mode,按query数据解释:在StrictMode中,任何百分比符号"%"必须由恰好两个十六进制字符后跟,不允许某些字符(包括空格)以未编码形式出现。在TolerantMode中,接受所有的未经编码的字符,容忍解析器将修正不成对的百分比符号"%"。在DecodedMode中,"%"代表自身,编码的字符是不可能的。

查询字符串通常包含百分比编码序列,因此不建议使用DecodedMode。需要特别注意的一个特殊序列是加号字符('+')。虽然QUrl不会将空格转换为加号字符,尽管由网络浏览器提交的HTML表单这样做。要在查询中表示实际的加号字符,通常使用序列"%2B"。此函数将在TolerantModeStrictMode中保留"%2B"序列不变。

另请参阅query() 和 hasQuery().

void QUrl::setQuery(const QUrlQuery &query)

这是一个重载函数。

将URL的查询字符串设置为query

此函数将从QUrlQuery对象重构查询字符串并将其设置在此QUrl对象上。该函数没有解析参数,因为QUrlQuery包含已经是解析过的数据。

另请参阅query() 和 hasQuery().

void QUrl::setScheme(const QString &scheme)

将URL的方案设置为scheme。由于方案只能包含ASCII字符,因此不对输入进行转换或解码。它还必须以ASCII字母开头。

方案描述了URL的类型(或协议)。它表示为URL开头的一个或多个ASCII字符。

该方案完全符合 RFC 3986 标准:scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

以下示例显示了一个 scheme 为 "ftp" 的 URL

要设置 scheme,使用以下调用

    QUrl url;
    url.setScheme("ftp");

如果 scheme 为空,则 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 解析模式,并产生运行时警告。

另请参阅url() 和 toString()。

void QUrl::setUserInfo(const QString &userInfo, QUrl::ParsingMode mode = TolerantMode)

将 URL 的用户信息设置为 userInfo。用户信息是 URL 授权的组成部分,如 setAuthority() 所述。

用户信息由用户名和可选的密码组成,两者由冒号分隔。如果密码为空,则必须省略冒号。以下示例显示一个有效的用户信息字符串

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。用户名userName是URL权限中用户信息元素的一部分,具体请参考setUserInfo()。

userName数据根据mode进行解释:在StrictMode模式下,任何'%'字符必须由恰好两个十六进制字符跟随,一些字符(包括空格)在未解码的形式中不允许。在TolerantMode(默认模式)中,所有字符都接受未解码形式,容忍解析器会纠正未跟随两个十六进制字符的'%'。在DecodedMode中,'%'代表自身,编码字符是不可能的。

在设置用户名时,应使用QUrl::DecodedMode,此时数据源不是URL,例如显示给用户的密码对话框或通过调用userName()并使用QUrl::FullyDecoded格式化选项获取的用户名。

另请参阅 userName() 和 setUserInfo

[noexcept] void QUrl::swap(QUrl &other)

交换URL other 与此URL。此操作非常快且不会失败。

[static, since 6.3] QByteArray QUrl::toAce(const QString &domain, QUrl::AceProcessingOptions options = {})

返回指定域名 domain 的ASCII兼容编码。可以通过传递带options的标志来自定义输出。此函数的结果被视为与domain等价。

ASCII兼容编码(ACE)由RFC 3490、RFC 3491和RFC 3492定义,并由Unicode技术标准#46更新。它是国际域名应用程序(IDNA)规范的一部分,该规范允许使用非US-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,但任何最初存在的密码将会丢失。

另请参阅格式化选项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是自动释放的。

[静态] QByteArray QUrl::toPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray())

返回编码后的input副本。首先将input转换为UTF-8,所有不在未保留组中的ASCII字符都被转换为百分号编码。要防止字符被百分号编码,请将它们传递给exclude。要强制字符被百分号编码,请将它们传递给include

未保留的定义为:ALPHA / DIGIT / "-" / "." / "_" / "~"

QByteArray ba = QUrl::toPercentEncoding("{a fishy string?}", "{}", "s");
qDebug(ba.constData());
// prints "{a fi%73hy %73tring%3F}"

QString QUrl::toString(QUrl::FormattingOptions options = FormattingOptions(PrettyDecoded)) const

返回URL的字符串表示形式。可以通过传递带有options的标志来自定义输出。此函数不允许QUrl::FullyDecoded选项,因为这会产生模糊的数据。

默认的格式化选项是PrettyDecoded

另请参阅FormattingOptionsurl() 和 setUrl()。

[静态] 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选项,因为这会产生模糊的数据。

结果QString可以稍后在QUrl中使用。

toString(options)的同义词。

另请参阅setUrl()、FormattingOptionstoEncoded() 和 toString()。

QString QUrl::userInfo(QUrl::ComponentFormattingOptions options = PrettyDecoded) const

返回URL的用户信息,如果用户信息未定义则返回空字符串。

此函数返回一个无歧义值,可能包含仍使用百分号编码的字符以及一些在QString解码形式中不可表示的控制序列。

options 参数控制如何格式化用户信息组件。此函数不允许使用 QUrl::FullyDecoded 的值。如果您需要获取完全解码的数据,请单独调用 userName() 和 password()。

另请参阅setUserInfouserNamepasswordauthority

QString QUrl::userName(QUrl::ComponentFormattingOptions options = FullyDecoded) const

如果定义了URL的用户名,则返回URL的用户名;否则返回空字符串。

参数options控制如何格式化用户名组件。所有值都产生一个明确的输出。在QUrl::FullyDecoded下,所有百分编码序列都将解码;否则,返回值可能包含某些在QString中无法表示的某些控制序列的百分编码序列。

请注意,如果存在不可表示的序列,则QUrl::FullyDecoded可能会丢失数据。建议在结果将在非URL上下文中使用时使用该值,例如在QAuthenticator中设置或协商登录。

另请参阅setUserNameuserInfo

bool QUrl::operator!=(const QUrl &url) const

如果此URL和给定的 url 不相等,则返回 true;否则返回 false

另请参阅matches

[noexcept] QUrl &QUrl::operator=(const QUrl &url)

将指定的 url 赋值给此对象。

QUrl &QUrl::operator=(const QString &url)

将指定的 url 赋值给此对象。

[noexcept] QUrl &QUrl::operator=(QUrl &&other)

other 移动赋值到此 QUrl 实例。

bool QUrl::operator==(const QUrl &url) const

如果此URL和给定的 url 相等,则返回 true;否则返回 false

另请参阅matches

相关非成员函数

QDataStream &operator<<(QDataStream &out, const QUrl &url)

将URL url 写入流 out 并返回流的引用。

另请参阅QDataStream运算符的格式

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

你可以将其重写为

url = QUrl::fromLocalFile(filename);
url = baseurl.resolved(QUrl(filename));

参见 QT_NO_CAST_FROM_ASCII.

© 2024 The Qt Company Ltd. 此处包含的文档贡献均为各自所有者的版权。提供的文档根据 GNU 自由文档许可证 version 1.3 的条款授权,该许可证由自由软件基金会发布。Qt 及相关标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。