提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:鲍佳佳|2020-10-09 11:59:00.847|阅读 397 次
概述:在本文中,我们想告诉您Qt Network模块在Qt 6中的一些最新更新和更改。以及一些潜在的发展。相信通过本文的阅读一定会对新版本以及Qt有进一步的认识!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。赶快点击下载Qt最新试用版吧>>
【Qtitan组件集】
在本文中,我们想告诉您Qt Network模块在Qt 6中的一些最新更新和更改。以及一些潜在的发展
QNetworkAccessBackendQNetworkAccessBackend是一个抽象基类,用于与我们的缓存,文件和ftp后端接口。我们已经在Qt中使用QNetworkAccessBackend已有一段时间了,但是不可能以任何合理的方式在Qt网络外部使用。对于Qt 6,我们计划将ftp后端移出Qt Network,并作为插件单独分发。为此,我们使QNetworkAccessBackend在外部使用起来更加友好,并使QNetworkAccessManager能够在运行时加载这些插件。与我们的某些其他插件接口一样,它没有Qt本身具有的严格的向后兼容性保证,并且需要链接到QtNetworkPrivate才能使用它。
我们希望能够专门化各种后端的行为。例如,非网络后端不需要我们为目标URL准备代理列表。为此,我们添加了三个不同的枚举,每个枚举中都有一些值:
其中,仅需要“ TargetType”指定后端支持的目标是联网的还是本地的。
如果某些功能无法使用,则某些功能可能无法启用。一个这样的例子是IO功能“ZeroCopy”,它启用函数readPointer()和advanceReadPointer()。如果未启用,则不会调用这两个函数。拥有这个特性系统的主要思想是我们可以在不破坏任何现有代码的情况下进行这些改进。新代码必须选择使用新功能。不过,重申一下:我们不能保证网络访问后端插件与使用Qt的应用程序具有相同的向后兼容性。
要实现网络访问后端插件,您需要实现一个从QNetworkAccessBackendFactory继承的类。如果支持所请求的方案,则此类将完成创建后端的工作。您还需要创建一个从QNetworkAccessBackend继承的类,并覆盖所有纯虚函数以及'read()'或'readPointer()'和'advanceReadPointer()'(如果您的类支持'ZeroCopy'功能) 。对于现有用途,QNetworkAccessCacheBackend和QNetworkAccessFileBackend均已更新为使用新接口,尽管它们直接编译为Qt而不是作为插件分发。
通讯协定在Qt 6中,我们放弃了SPDY支持。SPDY是具有开放规范的实验性协议,主要由Google开发。SPDY成为HTTP / 2协议的前身和原型。
在维持与HTTP / 1.1的兼容性(例如与方法,状态代码,URI和大多数标头字段)的兼容性的同时,HTTP / 2还添加了:
在Qt 6之前,必须通过设置以下属性之一来手动启用HTTP / 2协议:
例如:
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, true);
对于“ Http2AllowedAttribute”,QNetworkAccessManager对“ https”方案使用应用程序层协议协商,对“ http”方案使用协议升级头“ h2c”。如果您事先知道服务器以所谓的“直接”模式支持HTTP / 2,而无需协议协商,则第二个属性很有用。
在Qt 6中,默认情况下启用HTTP / 2支持:这意味着属性'Http2AllowedAttribute'设置为'true'。如果无法协商HTTP / 2,则QNetworkAccessManager将回退到HTTP / 1.1。如果您的应用程序只能使用HTTP / 1.1,则可以为新的网络请求将属性'Http2AllowedAttribute'设置为'false':
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);
此“默认启用”规则有一个例外:
QNetworkAccessManager::connectToHostEncrypted(host, port, configuration);
使用此功能,应用程序可以预连接到服务器,而无需发送任何请求。如果我们要在这样的连接上启用HTTP / 2,则该连接对于希望使用HTTP / 1.1并通过使用请求属性禁用HTTP / 2的应用程序将毫无用处。通过在“配置”参数中设置所需的协议列表,可以显式启用HTTP / 2,例如:
auto tlsConfig = QSslConfiguration::defaultConfiguration(); tlsConfig.setAllowedNextProtocols({QSslConfiguration::ALPNProtocolHTTP2}); manager.connectToHostEncrypted(host, port, tlsConfig);
默认重定向策略已更改
另一个可能影响您的网络代码的更改是QNetworkAccessManager在Qt 6中使用的默认重定向策略。该策略API最初是在Qt 5中引入的,其思想是在Qt 6中切换为默认的自动重定向处理。
QNetworkAccessManager支持几种重定向策略,由枚举QNetworkRequest :: RedirectPolicy描述。这些政策是:
从Qt 6开始,QNetworkAccessManager发出请求时将使用的默认重定向策略是QNetworkRequest :: NoLessSafeRedirectPolicy(该策略禁止从“ https”重定向到“ http”)。
如果您有一个应用程序,该应用程序依赖于连接到QNetworkReply :: redirected()的插槽来处理重定向,则必须使用Qt 6将策略设置为QNetworkRequest :: ManualRedirectPolicy:
req.setAttribute(RedirectPolicyAttribute, ManualRedirectPolicy);
承载管理已删除
承载管理是对过去支持漫游和管理某些设备上的连接所需的机器的名称。它还可以选择连接到internet时使用的设备网络接口。今天,这种情况已不再,因为操作系统通常会自行处理漫游,并会自动选择最佳的网络接口来发送数据,通常不会为应用程序提供影响这些选择的方法(或不方便的方式)。
尽管QNetworkManager提供了api来选择要使用的接口或配置正在使用的接口,但这一新的现实意味着当前没有支持的平台为Qt提供可靠的方式来完成请求。在随后的Wifi请求被触发后,可能会导致网络中的各种Qt请求保持高流量,从而导致网络在短时间内保持高流量。
考虑到新的现实也使得承载管理在很大程度上是多余的,我们决定是时候让Qt网络的这一部分退役了。
一个仍然有用的特性是能够检查连接并获得连接更改的通知。到目前为止,在qt6.0中还没有找到替代品,尽管我们已经收集了一些用例,并希望在接下来的小版本中有一个替代品来替代这个功能。如果您有特定的用例,您希望看到涵盖的内容,或者您想跟踪这个任务的进度,那么请转到QTBUG-86966。
QSslSocket
在Qt 6中,QSslSocket接收了一个附加的API,提供有关作为TLS协议的一部分接收或发送的警报消息的信息。:以下面为例:
QSslSocket中有两个新信号:
如果可能,这些信号还会报告问题的文本描述(如果由TLS库提供)。
与TLS握手相关的另一项更改是能够在握手仍在进行时尽早报告握手期间遇到的错误的功能。这些错误直接从验证回调中报告。QSslConfiguration有一个新的getter和setter:
QSslSocket有一个新信号:
和一个错误的函数必须忽略:
如果不忽略错误,则底层TLS库将向对等方发送警报消息。
对于使用QNetworkAccessManager的应用程序,此API有点底层,并且没有太大的意义。但是,如果直接使用QSslSocket,则对于调试目的或实现某些错误或警告处理逻辑时,它可能非常方便。目前,此更改适用于我们的OpenSSL后端;我们使用的其他TLS库没有必需的API或未提供我们所需的完整信息。
TLS 1.3及更高版本好吧,这一部分并不是关于qt6已经具备的。这也是关于未来可能的发展。到目前为止,qt6支持TLS协议的最新版本,即1.3,这要归功于我们的OpenSSL后端(qt5也支持tls1.3)。我们正致力于在Schannel后端启用tls1.3。不幸的是,SecureTransport被Apple弃用,没有可用的TLS库作为替代,只有一些构建在BoringSSL之上的更高级别的框架(请注意这一点的讽刺!)。这意味着,对于我们的达尔文用户,我们将在未来提供另一种选择。以QNetworkAccessManager为例,在苹果的NSUrlSession等类之上实现的一个新的QNetworkAccessBackend非常方便(包括tls1.3和实验性的HTTP/3支持)。
如果这篇文章没能满足你的需求、点击获取更多文章教程!现在立刻下载Qt免费试用吧!更多Qt类开发工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在线订购现直降1000元,欢迎咨询慧都获取更多优惠>>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:2024年对于FastReport来说是充满挑战和收获的一年。FastReport在多个领域取得了重要突破和创新成果,不仅不断优化现有产品,
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢