QNetworkReply 类

QNetworkReply 类包含使用 QNetworkAccessManager 发送的请求的数据和头部信息。 更多...

头文件 #include <QNetworkReply>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承 QIODevice

注意:此类中所有函数均为可重入的

公共类型

枚举NetworkError { NoError, ConnectionRefusedError, RemoteHostClosedError, HostNotFoundError, TimeoutError, …, UnknownServerError }
RawHeaderPair

公共函数

虚拟~QNetworkReply()
QVariantattribute(QNetworkRequest::Attribute code) const
QNetworkReply::NetworkErrorerror() const
boolhasRawHeader(QAnyStringView headerName) const
QVariantheader(QNetworkRequest::KnownHeaders header) const
voidignoreSslErrors(const QList<QSslError> &errors)
boolisFinished() const
boolisRunning() const
QNetworkAccessManager *manager() const
QNetworkAccessManager::Operationoperation() const
QByteArrayrawHeader(QAnyStringView headerName) const
QList<QByteArray>rawHeaderList() const
const QList<QNetworkReply::RawHeaderPair> &rawHeaderPairs() const
qint64readBufferSize() const
QNetworkRequestrequest() const
virtual voidsetReadBufferSize(qint64 size)
voidsetSslConfiguration(const QSslConfiguration &config)
QSslConfigurationsslConfiguration() const
QUrlurl() const

重写的公共函数

virtual voidclose() override

公共槽

virtual voidabort() = 0
virtual voidignoreSslErrors()

信号

voiddownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
voidencrypted()
voiderrorOccurred(QNetworkReply::NetworkError code)
void完成()
voidmetaDataChanged()
voidpreSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
void允许重定向()
voidredirected(const QUrl &url)
(自 6.3) voidrequestSent()
(自 6.3) void开始建立socket连接()
voidsslErrors(const QList<QSslError> &errors)
voiduploadProgress(qint64 bytesSent, qint64 bytesTotal)

受保护的函数

QNetworkReply(QObject *parent = nullptr)
virtual voidignoreSslErrorsImplementation(const QList<QSslError> &errors)
voidsetAttribute(QNetworkRequest::Attribute code, const QVariant &value)
voidsetError(QNetworkReply::NetworkError errorCode, const QString &errorString)
voidsetFinished(bool finished)
voidsetHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
voidsetOperation(QNetworkAccessManager::Operation operation)
voidsetRawHeader(const QByteArray &headerName, const QByteArray &value)
voidsetRequest(const QNetworkRequest &request)
virtual voidsetSslConfigurationImplementation(const QSslConfiguration &configuration)
voidsetUrl(const QUrl &url)
virtual voidsslConfigurationImplementation(QSslConfiguration &configuration) const

详细描述

QNetworkReply类包含了与使用QNetworkAccessManager发送的请求相关的数据和元数据。与QNetworkRequest类似,它包含URL和头信息(解析后和原始形式),以及有关回复状态和回复内容的一些信息。

QNetworkReply是一个顺序访问的QIODevice,这意味着一旦从对象中读取数据,它就不再由设备保留。因此,如果应用程序需要保留这些数据,它就需要负责保留这些数据。每次从网络接收到更多信息并处理时,都会发出readyRead()信号。

在收到数据时,也会发出downloadProgress()信号,但其中包含的字节数可能不代表实际接收的字节数,如果对内容进行了任何转换(例如,解压缩并去除协议开销)。

尽管QNetworkReply是一个连接到回复内容的QIODevice,但它也会发出uploadProgress()信号,这表明具有此类内容的操作的上传进度。

注意:不要在连接到errorOccurred()或finished()信号的槽中删除对象。使用deleteLater()。

另请参阅:QNetworkRequestQNetworkAccessManager

成员类型文档

enum QNetworkReply::NetworkError

指示在处理请求过程中找到的所有可能错误条件。

常量描述
QNetworkReply::NoError0没有错误条件。

注意:当HTTP协议返回重定向时不会报告错误。您可以通过QNetworkRequest::RedirectionTargetAttribute属性检查是否存在重定向。

常量描述
QNetworkReply::ConnectionRefusedError1远程服务器拒绝连接(服务器不接受请求)
QNetworkReply::RemoteHostClosedError2远程服务器在收到并处理整个响应之前提前关闭了连接
QNetworkReply::HostNotFoundError3未找到远程主机名(无效的主机名)
QNetworkReply::TimeoutError4连接到远程服务器超时
QNetworkReply::OperationCanceledError5通过调用abort()或close()取消操作,在操作完成之前
QNetworkReply::SslHandshakeFailedError6SSL/TLS握手失败,无法建立加密通道。应该已经发出sslErrors()信号。
QNetworkReply::TemporaryNetworkFailureError7由于从网络断开连接而连接断开,但是系统已启动漫游到另一个接入点。应重新提交请求,并在连接重新建立后立即处理。
QNetworkReply::NetworkSessionFailedError8由于从网络断开连接或启动网络失败而连接断开
QNetworkReply::BackgroundRequestNotAllowedError9由于平台策略不允许当前的背景请求
QNetworkReply::TooManyRedirectsError10在跟随重定向时达到了最大限制。默认情况下,限制设置为50或由QNetworkRequest::setMaxRedirectsAllowed()设置(该值从5.6版本引入)。
QNetworkReply::InsecureRedirectError11在跟随重定向时,网络访问API检测到了从加密协议(https)到未加密协议(http)的重定向。(该值从5.6版本引入)。
QNetworkReply::ProxyConnectionRefusedError101拒绝连接到代理服务器(代理服务器不接受请求)
QNetworkReply::ProxyConnectionClosedError102代理服务器在收到并处理整个响应之前提前关闭了连接
QNetworkReply::ProxyNotFoundError103找不到代理主机名(无效的代理主机名)
QNetworkReply::ProxyTimeoutError104连接到代理超时或代理没有及时回复发送的请求
QNetworkReply::ProxyAuthenticationRequiredError105代理要求验证以处理请求,但没有接受提供的任何凭据(如果有)
QNetworkReply::ContentAccessDenied201拒绝远程内容的访问(类似于HTTP错误403)
QNetworkReply::ContentOperationNotPermittedError202不允许在远程内容上执行请求的操作
QNetworkReply::ContentNotFoundError203服务器上找不到远程内容(类似于HTTP错误404)
QNetworkReply::AuthenticationRequiredError204远程服务器要求验证以提供服务,但提供的凭据未得到接受(如果有)
QNetworkReply::ContentReSendError205需要重新发送请求,但失败了,例如,因为上传的数据无法第二次读取。
QNetworkReply::ContentConflictError206由于与资源的当前状态冲突,无法完成请求。
QNetworkReply::ContentGoneError207服务器上不再提供请求的资源。
QNetworkReply::InternalServerError401服务器遇到意外情况,阻止其完成请求。
QNetworkReply::OperationNotImplementedError402服务器不支持完成请求所需的功能。
QNetworkReply::ServiceUnavailableError403服务器现在无法处理请求。
QNetworkReply::ProtocolUnknownError301由于协议未知,网络访问API无法处理请求
QNetworkReply::ProtocolInvalidOperationError302请求的操作对此协议无效
QNetworkReply::UnknownNetworkError99检测到一个未知的与网络相关的错误
QNetworkReply::UnknownProxyError199检测到一个未知的与代理相关的错误
QNetworkReply::UnknownContentError299检测到一个与远程内容相关的未知错误
QNetworkReply::ProtocolFailure399检测到一个协议故障(解析错误、无效或预期之外的响应等)
QNetworkReply::UnknownServerError499检测到一个与服务器响应相关的未知错误

另请参阅error() 和 errorOccurred

QNetworkReply::RawHeaderPair

RawHeaderPair 是一个 QPair<QByteArray, QByteArray>,其中第一个 QByteArray 是头部名称,第二个是头部。

成员函数文档

[显式受保护] QNetworkReply::QNetworkReply(QObject *parent = nullptr)

创建一个具有父对象 parent 的 QNetworkReply 对象。

您不能直接实例化 QNetworkReply 对象。请使用 QNetworkAccessManager 函数来完成此操作。

[虚拟 noexcept] QNetworkReply::~QNetworkReply()

废弃此响应并释放与其关联的任何资源。如果任何网络连接仍然打开,则将关闭它们。

另请参阅abort() 和 close

[纯虚槽] void QNetworkReply::abort()

立即中止操作并关闭任何仍打开的网络连接。正在进行的上传也会被中止。

也会发出 finished() 信号。

另请参阅close() 和 finished

QVariant QNetworkReply::attribute(QNetworkRequest::Attribute code) const

返回与代码 code 相关的属性。如果尚未设置属性,则返回一个无效的 QVariant(类型 QMetaType::UnknownType)。

您可以预期在 QNetworkRequest::Attribute 中列出的默认值将应用于此函数返回的值。

另请参阅setAttribute() 和 QNetworkRequest::Attribute

[重写虚函数] void QNetworkReply::close()

重实: QIODevice::close

关闭该设备以进行读取。未读取的数据将被丢弃,但网络资源将在完成之前不丢弃。特别是,如果任何上传正在进行中,它将继续,直到完成。

当所有操作结束并释放网络资源时,会发出 finished() 信号。

另请参阅abort() 和 finished

[信号] void QNetworkReply::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)

该信号用于指示该网络请求下载进度的更新,如果有下载的话。如果此请求没有关联的下载,此信号将使用bytesReceivedbytesTotal均为0的值发射一次。

bytesReceived参数指示接收的字节数,而bytesTotal则表示预期的总下载字节数。如果不知道要下载的字节数,bytesTotal将为-1。

bytesReceived等于bytesTotal时,下载完成。此时,bytesTotal将不再是-1。

请注意,bytesReceivedbytesTotal的值可能不同于size()、通过read()或readAll()获取的总字节数,或者标题(ContentLengthHeader)中的值。这是因为下载过程中可能存在协议开销或数据可能被压缩。

另请参阅uploadProgress()和bytesAvailable

[signal] void QNetworkReply::encrypted()

当SSL/TLS会话成功完成初始握手时,会发射此信号。在此点,尚未传输任何用户数据。此信号可用于执行对证书链的额外检查,例如在网站证书更改时通知用户。如果回复不符合预期标准,则应通过连接到此信号的槽调用QNetworkReply::abort()来中断它。可以使用QNetworkReply::sslConfiguration()方法检查正在使用的SSL配置。

内部,QNetworkAccessManager可能对服务器打开多个连接,以便它可以并行处理请求。这些连接可以被重用,这意味着encrypted()信号不会被发射。这意味着,您只能保证在整个QNetworkAccessManager生命周期中接收针对网站的第一连接的此信号。

另请参阅QSslSocket::encrypted()和QNetworkAccessManager::encrypted

QNetworkReply::NetworkError QNetworkReply::error() const

返回在处理此请求过程中找到的错误。如果没有找到错误,则返回NoError

另请参阅setError

[signal] void QNetworkReply::errorOccurred(QNetworkReply::NetworkError code)

当回复检测到处理错误时,会发射此信号。接下来很可能会发射finished()信号,表明连接已结束。

code参数包含检测到的错误的代码。调用errorString()以获取错误条件的文本表示。

注意: 不要在连接到此信号的槽中删除对象。请使用deleteLater

另请参阅error()和errorString

[signal] void QNetworkReply::finished()

当响应处理完成时,会发出此信号。在此信号发出之后,将不会再更新响应的数据或元数据。

除非调用了 close() 或 abort(),否则该响应仍然可以用于读取,可以通过调用 read() 或 readAll() 来获取数据。特别是,如果由于 readyRead() 没有进行任何调用,则调用 readAll() 将获取完整的 QByteArray 内容。

此信号与 QNetworkAccessManager::finished() 信号同步发出,其中该信号中的响应参数是此对象。

注意: 不要在连接到此信号的槽中删除对象。请使用deleteLater

您还可以使用 isFinished() 来检查 QNetworkReply 是否完成,甚至在您收到 finished() 信号之前。

另请参阅 setFinished(),QNetworkAccessManager::finished(),以及 isFinished()。

bool QNetworkReply::hasRawHeader(QAnyStringView headerName) const

如果远程服务器已发送名为 headerName 的原始标题,返回 true

注意:在 Qt 6.7 之前的版本中,此函数只接受 QByteArray

另请参阅 rawHeader()。

如果远程服务器已发送名为 header 的已知标题,则返回其值。如果未发送该标题,则返回一个无效的 QVariant

另请参阅 rawHeadersetHeader,以及 QNetworkRequest::header

[虚拟槽] void QNetworkReply::ignoreSslErrors()

如果调用此函数,则会忽略网络连接相关的 SSL 错误,包括证书验证错误。

警告:请确保始终让用户检查由 sslErrors() 信号报告的错误,并且仅在用户确认继续时调用此方法。如果出现意外错误,则应中止响应。未检查实际错误就调用此方法很可能会对您的应用程序造成安全风险。请谨慎使用!

可以从连接到 sslErrors() 信号的槽中调用此函数,该信号指示发现了哪些错误。

注意:如果为 QNetworkAccessManager 启用了 HTTP Strict Transport Security,则此函数不起作用。

另请参阅 sslConfigurationsslErrors,以及 QSslSocket::ignoreSslErrors

void QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors)

这是一个重载函数。

如果调用此函数,则忽略 errors 中指定的 SSL 错误。

注意:由于大多数SSL错误都与证书相关,对于其中大多数,您必须设置与此SSL错误相关的预期证书。例如,如果您想向使用自签名证书的服务器发出请求,请考虑以下片段:

QList<QSslCertificate> cert = QSslCertificate::fromPath("server-certificate.pem"_L1);
QSslError error(QSslError::SelfSignedCertificate, cert.at(0));
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);

QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("https://server.tld/index.html")));
reply->ignoreSslErrors(expectedSslErrors);
// here connect signals etc.

对函数多次调用将替换先前调用中传递的错误列表。您可以调用此函数并传入空列表来清除想要忽略的错误列表。

注意:如果为 QNetworkAccessManager 启用了 HTTP Strict Transport Security,则此函数不起作用。

另请参阅:sslConfiguration(),sslErrors(),QSslSocket::ignoreSslErrors() 和 QNetworkAccessManager::setStrictTransportSecurityEnabled()。

[虚保护] void QNetworkReply::ignoreSslErrorsImplementation(const QList<QSslError> &errors)

此虚拟方法提供以覆盖ignoreSslErrors行为的能力。ignoreSslErrors是这个方法的公共包装器。errors包含用户希望忽略的错误。

另请参阅:ignoreSslErrors()。

bool QNetworkReply::isFinished() const

当响应已完成或被终止时返回true

另请参阅:isRunning()。

bool QNetworkReply::isRunning() const

当请求仍在处理中,并且响应尚未完成或被终止时返回true

另请参阅:isFinished()。

QNetworkAccessManager *QNetworkReply::manager() const

返回用于创建此QNetworkReply对象的QNetworkAccessManager。最初,它也是父对象。

[信号] void QNetworkReply::metaDataChanged()

当此响应中的元数据更改时,将发出此信号。元数据是除了内容(数据)本身之外的所有信息,包括网络头部。在大多数情况下,在接收第一个数据字节之前就能够得知所有元数据。然而,在处理数据期间,可能会收到头部或其他元数据的更新。

另请参阅:header(),rawHeaderList(),rawHeader() 和 hasRawHeader()。

QNetworkAccessManager::Operation QNetworkReply::operation() const

返回为该响应发布的操作。

另请参阅:setOperation()。

[信号] void QNetworkReply::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)

如果SSL/TLS握手协商了PSK密码组,则会发出此信号,因此需要PSK身份验证。

在使用PSK(相移键控)时,客户端必须向服务器发送有效的身份和有效的预共享密钥,以便SSL握手可以继续进行。应用程序可以通过根据其需求填写传递的 认证器 对象,在连接到此信号的插槽中提供此信息。

注意:忽略此信号或未能提供所需的凭据将导致握手失败,因此连接将被终止。

注意:认证器对象由响应者所有,应用程序不得删除。

另请参阅:QSslPreSharedKeyAuthenticator

QByteArray QNetworkReply::rawHeader(QAnyStringView headerName) const

返回远程服务器发送的头部 headerName 的原始内容。如果没有此类头部,则返回一个空字节数组,这可能与空头部不可区分。使用 hasRawHeader() 验证服务器是否发送了此类头部字段。

注意:在 Qt 6.7 之前的版本中,此函数只接受 QByteArray

另请参阅:setRawHeaderhasRawHeaderheader

QList<QByteArray> QNetworkReply::rawHeaderList() const

返回由远程服务器发送的头部字段列表,顺序与发送顺序相同。重复的头部会合并,取后者的位置。

const QList<QNetworkReply::RawHeaderPair> &QNetworkReply::rawHeaderPairs() const

返回原始头部对列表。

qint64 QNetworkReply::readBufferSize() const

返回读取缓冲区的大小,以字节为单位。

另请参阅:setReadBufferSize

[信号] void QNetworkReply::redirectAllowed()

当处理 redirected 信号的客户端代码已验证新的URL时,它将发出此信号以允许进行重定向。此协议适用于将重定向策略设置为 QNetworkRequest::UserVerifiedRedirectPolicy 的网络请求。

另请参阅:QNetworkRequest::UserVerifiedRedirectPolicyQNetworkAccessManager::setRedirectPolicyQNetworkRequest::RedirectPolicyAttribute

[信号] void QNetworkReply::redirected(const QUrl &url)

如果请求未设置 QNetworkRequest::ManualRedirectPolicy,并且服务器响应状态码为3xx(特别是301,302,303,305,307或308状态码)并带有有效的URL在Location头部中,表示HTTP重定向,则发出此信号。《i translate="no">url

另请参阅:QNetworkRequest::RedirectPolicy

QNetworkRequest QNetworkReply::request() const

返回为此次回复发出的请求。请注意,请求的URL可能不同于回复的URL。

参见:QNetworkRequest::url()、url() 和 setRequest()。

[信号,自6.3版开始] void QNetworkReply::requestSent()

当请求发送时,会发出此信号1次或多次。用于自定义进度或超时处理。

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

参见:metaDataChanged() 和 socketStartedConnecting()。

[保护] void QNetworkReply::setAttribute(QNetworkRequest::Attribute code, const QVariant &value)

将属性 code 设置为值 value。如果之前已设置 code,则将覆盖它。如果 value 是无效的 QVariant,则将取消设置该属性。

参见:attribute() 和 QNetworkRequest::setAttribute()。

[保护] void QNetworkReply::setError(QNetworkReply::NetworkError errorCode, const QString &errorString)

将错误条件设置为 errorCode。使用 errorString 设置人类可读的消息。

调用 setError() 不发出 errorOccurred(QNetworkReply::NetworkError) 信号。

另请参阅error()和errorString

[保护] void QNetworkReply::setFinished(bool finished)

将回复设置为 finished

在此设置后,回复的数据不得更改。

参见:finished() 和 isFinished()。

[保护] void QNetworkReply::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)

设置已知头部 header 为值 value。同时也会设置该头部的原始形式。

参见:header()、setRawHeader() 和 QNetworkRequest::setHeader()。

[保护] void QNetworkReply::setOperation(QNetworkAccessManager::Operation operation)

将此对象的关联操作设置为 operation。这个值将由 operation() 返回。

注意:应在创建该对象时设置操作,之后不再更改。

参见:operation() 和 setRequest()。

[保护] void QNetworkReply::setRawHeader(const QByteArray &headerName, const QByteArray &value)

将原始头 headerName 设置为值 value。如果以前已设置 headerName,则将其覆盖。具有相同名称的多个 HTTP 头功能上等效于一个单一的头部,其值由逗号分隔 连接。

如果 headerName 与已知头匹配,则解析值 value,并将相应的解析形式也设置。

另请参阅 rawHeader(),header(),setHeader(),以及 QNetworkRequest::setRawHeader

[虚拟] void QNetworkReply::setReadBufferSize(qint64 size)

将读取缓冲区的大小设置为 size 字节。读取缓冲区是存储从网络上下载的数据的缓冲区,在用 QIODevice::read() 读取之前。

当此缓冲区满时(即 bytesAvailable() 返回 size 或更多),QNetworkReply 将尝试停止从网络上读取,这也会导致下载减速。如果缓冲区大小没有限制,则 QNetworkReply 将尝试尽可能快地从网络上下载。

QAbstractSocket::setReadBufferSize 不同,QNetworkReply 不能保证读取缓冲区大小精度。也就是说, bytesAvailable() 可以返回超过 size

另请参阅 readBufferSize

[受保护] void QNetworkReply::setRequest(const QNetworkRequest &request)

将与此对象关联的请求设置为 request。此值将由 request() 返回。

注意: 应当在创建此对象时设置请求,并且不应再改变。

另请参阅 request() 和 setOperation

void QNetworkReply::setSslConfiguration(const QSslConfiguration &config)

如果可能,将与此请求关联的网络连接的 SSL 配置设置为 config

另请参阅 sslConfiguration

[虚拟受保护] void QNetworkReply::setSslConfigurationImplementation(const QSslConfiguration &configuration)

此虚拟方法提供用于覆盖 setSslConfiguration 的行为。 setSslConfiguration 是此方法的公共包装器。如果覆盖此方法,请使用 configuration 来设置 SSL 配置。

另请参阅 sslConfigurationImplementation() 和 setSslConfiguration

[受保护] void QNetworkReply::setUrl(const QUrl &url)

设置正在处理的目标URL为url。通常,URL与已发布的请求的URL相匹配,但由于各种原因,它可能不同(例如,将文件路径转换为绝对路径或规范路径)。

另请参阅url(),request()和QNetworkRequest::url()。

[信号,自6.3以来] void QNetworkReply::socketStartedConnecting()

在发送请求之前,在套接字连接时发送0次或多次此信号。对于自定义进度或超时处理非常有用。

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

另请参阅metaDataChanged()和requestSent()。

QSslConfiguration QNetworkReply::sslConfiguration() const

如果使用SSL,则返回与此回复关联的SSL配置和状态。它将包含远程服务器的证书、其证书链以及使用的加密加密算法。

sslErrors()被发出时(如果被发出),将知道对等方的证书及其证书链。

另请参阅setSslConfiguration()。

[虚受保护] void QNetworkReply::sslConfigurationImplementation(QSslConfiguration &configuration) const

此虚方法提供覆盖sslConfiguration()行为的选项。sslConfiguration()是此方法的公共包装器。配置将返回到configuration

另请参阅setSslConfigurationImplementation()和sslConfiguration()。

[信号] void QNetworkReply::sslErrors(const QList<QSslError> &errors)

如果在设置SSL/TLS会话期间出现错误,包括证书验证错误,则发送此信号。errors参数包含错误列表。

要指示错误不是致命的且连接应继续,应从连接到此信号的槽中调用ignoreSslErrors()函数。如果不调用它,则在进行任何数据交换(包括URL)之前,将关闭SSL会话。

可以使用此信号向用户显示错误消息,指示安全性可能受损并显示SSL设置(请参阅sslConfiguration()以获取它)。如果用户在分析远程证书后决定继续,则槽应调用ignoreSslErrors()。

另请参阅QSslSocket::sslErrors(),QNetworkAccessManager::sslErrors(),sslConfiguration()和ignoreSslErrors()。

[信号] void QNetworkReply::uploadProgress(qint64 bytesSent, qint64 bytesTotal)

此信号用于指示此网络请求上传部分的进度,如果有则发出。如果没有与此请求关联的上传,则不会发出此信号。

bytesSent参数指示已上传的字节数,而bytesTotal指示要上传的总字节数。如果无法确定要上传的字节数,则bytesTotal将为-1。

bytesSent等于bytesTotal时,上传完成。那时,bytesTotal将不再是-1。

参阅downloadProgress()。

QUrl QNetworkReply::url() const

返回下载或上传的内容的URL。请注意,URL可能与其原始请求的URL不同。如果请求中启用了重定向,则此函数返回网络API当前访问的URL,即请求重定向到的资源URL。

参阅request()、setUrl()、QNetworkRequest::url()以及redirected()。

© 2024 The Qt Company Ltd. 本文档中的文档贡献为各自所有者的版权。本提供在此的文档是根据由自由软件基金会发布的GNU自由文档许可证版本1.3条款许可的。Qt及其相关标志是芬兰以及/或其他国家的The Qt Company Ltd.的商标。所有其他商标均属于各自所有者。