当前位置: 首页 > news >正文

Qt5与Qt6的详细区别

一、QtCore

Qt5Qt6

QHash,QSet QMultiHash

qHash 函数的返回值和可选的第二个参数的类型是uint 。
uint qHash(MyType x, uint seed)
qHash 函数的返回值和可选的第二个参数的类型是size_t ,

size_t qHash(MyType x, size_t seed);


QHash::insertMulti 被删除

QVector、QList

QVector 和QList 是独立的类它们被统一了, QList 是实际实现的类
QList的fromVector() 和 toVector() 以及QVector 的 fromList() 和 toList() 不再涉及数据复制

视图类

新增QStringView ,QByteArrayView QUtf8StringView 和QAnyStringView

QRecursiveMutex 不再继承自QMutex 。

QMutex::RecursionMode 枚举已被移除,而QMutexLocker 现在是一个模板类,可同时在QMutex 和QRecursiveMutex 上运行

已禁用QFuture<T> 到T 的转换。转换操作符调用了QFuture::result() ,

QFuture<T> 到QFuture<void> 的隐式转换也已禁用

IO 类

通过将单个命令字符串拆分为程序名称和参数来解释该字符串的QProcess::start() 重载已更名为QProcess::startCommand()

元类型系统

QVariant 已被重写,其所有操作均使用QMetaType ,QVariant 不能再用作QMap 中的键
QMetaType 类的比较器以及QDebug 和QDataStream 流运算符的注册是自动完成的。因此,QMetaType的注册函数已不复存在

正则表达式类

QRegExp 类型已退役至 Qt5Compat 模块,Qt6使用QRegularExpression 来代替QRegExp 

QEvent 和子类

QEvent 子类的复制构造函数和赋值操作符已被保护起来,以防止隐式复制。使用clone ()来实现复制事件

序列化类

用于将其转换为/从 Qt 传统 JSON 二进制格式的QJsonDocument 方法被移除,转而使用标准化的 CBOR 格式。Qt JSON 类型可转换为 Qt CBOR 类型,而 Qt CBOR 类型又可序列化为 CBOR 二进制格式,反之亦然。例如,请参见QCborValue::fromJsonValue() 和QCborValue::toJsonValue()。

如果您仍然需要使用二进制 JSON 格式,可以使用 Qt5Compat 模块中提供的替换。您可以在QBinaryJson 命名空间中找到它们

使用 Qt5Compat 模块

QT += core5compat
PUBLIC_LIBRARIESQt::Core5Compat

二、QtGui

Qt5Qt6

内核类-QBitmap 

不再支持从QPixmap 隐式构建QBitmap 。构造函数和赋值运算符已被明确并标记为废弃。请使用新的静态工厂函数fromPixmap 

内核类-QCursor 

不再支持从QPixmap 隐式构造QCursor 

内核类-QKeyCombination 

一个新类,用于存储键与可选修饰符的组合。该类可替代Qt::Key 枚举中的值,以类型安全的方式与修饰符相结合

文本类-QFontDatabase

const QStringList fontFamilies = QFontDatabase().families();
现在只有静态成员函数。构造函数已被弃用
const QStringList fontFamilies = QFontDatabase::families();

三、Qt网络

Qt5Qt6

名称不明确的重载

 
在QAbstractSocket 及其继承者以及QNetworkReply 中,error() 信号被 errorOccurred() 所取代
connect(socket, &QAbstractSocket::errorOccurred, this, &SomeClass::errorSlot);

删除了承载器管理

删除了 QNetworkConfiguration 和 QNetworkConfigurationManager 类

配置 QSslSocket

auto sslConfiguration = QSslConfiguration::defaultConfiguration();
sslConfiguration.setCiphers("ECDHE-ECDSA-AES256-SHA384");
socket.setSslConfiguration(sslConfiguration);

更改 QNetworkAccessManager 的默认行为

默认重定向策略已从手动改为QNetworkRequest::NoLessSafeRedirectPolicy 
QNetworkAccessManager 默认启用 HTTP/2 协议。根据不同的方案("https "或 "http"),QNetworkAccessManager 将使用应用层协议协商 TLS 扩展或 "协议升级 "HTTP 标头来协商 HTTP/2。如果无法协商 HTTP/2,访问管理器将退回到使用 HTTP/1.1。如果您的应用程序只能使用 HTTP/1.1,您就必须在新请求中手动禁用 HTTP/2

四、QtQML

Qt5Qt6

URL 解析

url 通常是直接解析的
property url imageFolder: "./images"
URL 保持相对,只有在需要时才会被解析如果您依赖于旧的行为,可以使用Qt.resolvedUrl
property url imageFolder: Qt.resolvedUrl("./images")

变量属性

variant 属性,自 Qt 5 起已被标记为过时,现在的处理方式与var 属性完全相同。依赖于赋值给变量属性时触发的隐式字符串转换的代码应更新为显式创建一个正确类型的对象。
property variant myColor: Qt.color("red")

已更改的 API

QQmlListPropertyCountFunction 和AtFunction 已改为使用qsizetype 而不是int 

删除的 API

1.获取引用的QQmlListProperty 构造函数已被删除
QQmlListProperty<QObject>(owner, &owner->objectList);
2.函数qmlDebug,qmlInfo,qmlWarning,qmlContext 和qmlEngine 曾经同时存在于全局命名空间
qmlRegisterType 已删除不带参数的重载。请使用qmlRegisterAnonymousType 代替,或使用QML_ANONYMOUS 切换到声明式类型注册。
QQmlEngine *engine = qmlEngine(qmlObject);
3.qmlRegisterExtendedType 和qmlRegisterInterface 中没有版本参数的重载已被删除。请使用提供版本的重载,或改用QML_EXTENDED 和QML_INTERFACE 进行声明式类型注册。

五、QtQuick

Qt5Qt6

更改了 font.weight 的类型

font.weight: "Bold"
ont.weight 的类型已更改为int
font.weight: Font.Bold

FontLoader 的name 属性

可写的

是一个只读属性

OpenGLInfo QML 类型

OpenGLInfo 已被弃用在 Qt 6 中被移除。请使用GraphicsInfo 代替

着色器

1.与custom materials 一样,不再以 GLSL 着色器字符串的形式指定效果
2.着色器效果源属性现在是 URL

QQuickItem

geometryChanged() 函数更名为geometryChange()

QQuick* 应用程序接口的更改

1.希望集成自己的 Vulkan、Metal 或 Direct3D 渲染命令集的应用程序应注意除QQuickWindow::beforeRendering() 和 afterRendering() 之外的新QQuickWindow 信号。仅连接到 beforeRendering 或 afterRendering 的现有 Qt 5 模式通常已不能满足需要,可能需要连接到其他信号(如beforeRenderPassRecording() 或afterRenderPassRecording() )作为补充。
2.依赖QQuickWindow::beforeRendering() 或 afterRendering() 信号发布自己的 OpenGL 渲染命令集的应用程序,应在调用 OpenGL 之前调用QQuickWindow::beginExternalCommands() ,在调用之后调用QQuickWindow::endExternalCommands() 。这样可以确保应用代码所做的状态更改不会导致场景图渲染器自身缓存状态的混乱。但请注意,就像在 Qt XML 5 中一样,更改Qt Quick 渲染器未使用的 OpenGL 3.x 或 4.x 状态仍会导致意外问题,因此建议应用程序在从连接到这些信号的槽或 lambdas 返回之前,将任何此类 OpenGL 状态重置为默认值。
3.删除了现有的QQuickWindow::setRenderTarget() 重载和相关的获取器,取而代之的是一个接收QQuickRenderTarget 的新函数。现在,结合QQuickRenderControl 执行重定向渲染的应用程序应使用这个新函数,以一种与 OpenGL 无关的方式指定渲染目标。
4.接收QSGRendererInterface::GraphicsApi 参数的QQuickWindow::setSceneGraphBackend() 重载已更名为setGraphicsApi()。
5.QQuickWindow 函数 setPersistentOpenGLContext 和 isPersistentOpenGLContext 已重命名,现在分别是QQuickWindow::setPersistentGraphics() 和QQuickWindow::isPersistentGraphics()。
6.setClearBeforeRendering() 和 clearBeforeRendering() 已从QQuickWindow 中删除。Qt XML 6 中没有跳过颜色缓冲区清除的选项。在 Qt 5 中,调用 setClearBeforeRendering() 常常需要与底层结合使用,以防止Qt Quick 清除渲染到颜色缓冲区中的内容。在 Qt 6 中,有一种更稳健的方法:连接到beforeRenderPassRecording() 信号,该信号会在清除后但在渲染Qt Quick'内容之前发出。
7.QQuickWindow::openglContext() 函数已被删除。当应用程序确保场景图使用 OpenGL 进行渲染时,就可以从QSGRendererInterface::getResource() 中查询QOpenGLContext 。
8.已移除 QQuickWindow::openglContextCreated() 信号。
9.已移除过时的 QQuickWindow::createTextureFromId() 函数。取而代之,使用来自 QPlatformInterface::QSGOpenGLTexture、QPlatformInterface::QSGVulkanTexture、QPlatformInterface::QSGD3D11Texture 或 QPlatformInterface::QSGMetalTexture 的 fromNative() 函数。
10.QQuickFramebufferObject 类的 API 不变,但只有在使用 OpenGL 渲染场景图时才起作用。在使用其他图形 API(如 Vulkan 或 Metal)时,该类将不起作用。依赖QQuickFramebufferObject 的应用程序应在其 main() 函数中调用QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL) ,强制使用 OpenGL。
11.QQuickRenderControl 在《OpenGL.NET》中,API 稍有改动:现在已移除 grab(),在适用情况下使用QQuickWindow::grabWindow() 代替。初始化()函数不再使用QOpenGLContext 。应用程序现在还需要酌情调用QQuickRenderControl::beginFrame() 和QQuickRenderControl::endFrame()。当需要进行多重采样时,必须调用新函数QQuickRenderControl::setSamples() 来指示采样次数。
12.希望结合现有本地图形设备或上下文对象执行Qt Quick 渲染的应用程序必须使用新的QQuickWindow::setGraphicsDevice() 函数,因为QQuickRenderControl 不再提供initialize(QOpenGLContext*) 函数。
13.将QQuickPaintedItem 和Context2D 设置为Framebuffer 模式没有任何作用。其行为与将模式设置为默认图像模式相同。
14.环境变量QSG_NO_DEPTH_BUFFER,建议通过在QQuickGraphicsConfiguration 上调用setDepthBufferFor2D() 来替代其用法,然后将其与QQuickWindow 关联。

QSG* 应用程序接口的更改

1.QSGMaterialShader 的接口发生了变化。实现不应再依赖 OpenGL,也不能假定函数(如现已删除的 updateState())是以QOpenGLContext current 调用的。在面向数据的新界面中,updateState() 被updateUniformData(),updateSampledImage() 和updateGraphicsPipelineState() 所取代。现在,着色器不再以字符串形式提供 GLSL 着色器代码,而是由 QtShader Tools 模块中的工具(如qsb 命令行工具)进行预处理,从而确保着色器资产在运行时无论使用哪种图形 API(Vulkan、Metal、OpenGL 或 Direct 3D)都能使用。
2.已移除 QSGEngine。如果应用程序不太可能使用该类,建议移植到QQuickRenderControl 。
3.QSGAbstractRenderer 不再是公共类。该类只有与 QSGEngine 结合使用才有意义,随着该类的删除,QSGAbstractRenderer 已转回私有。
4.QSGSimpleMaterial 方便类已被删除。应用程序应使用修订后的独立于 OpenGL 的QSGMaterial API。
4.要访问QSGTexture 的底层本地纹理对象,不再使用 textureId()。取而代之的是使用 QSGTexture::platformInterface() 和 QPlatformInterface::QSGOpenGLTexture、QPlatformInterface::QSGVulkanTexture、QPlatformInterface::QSGD3D11Texture 或 QPlatformInterface::QSGMetalTexture。
5.QSGImageNode 的子类必须覆盖新的附加虚函数,如 setAnisotropyLevel() 和 anisotropyLevel()。
6.QSGTexture 的子类可能需要重新设计。一些特定于 OpenGL 的虚函数(如 bind() 或 updateBindOptions())已不复存在,而一些新的虚函数则必须实现,如comparisonKey()。

OpenGL 使用中的变化Qt Quick

OpenGL 不再总是Qt Quick 渲染的默认选择。除非使用software 后端,否则Qt Quick 应用程序可以在运行时使用 OpenGL、Vulkan、Metal 或 Direct3D 11。如果没有通过QSG_RHI_BACKEND 环境变量或QQuickWindow::setSceneGraphBackend() 函数提出明确请求,则Qt Quick 会选择特定平台的默认值

六、Qt工具

Qt5Qt6

QWidget 类

虚拟QWidget::enterEvent() 处理程序现在接收一个包含指针位置信息的QEnterEvent* 参数,而不是简单的QEvent*

QDesktopWidget 和 QApplication::desktop()

QDesktopWidget 在 Qt 5 中已被弃用

在 Qt 6 中与 QApplication::desktop() 一起被移除。

QScreen 提供了查询可用屏幕、组成虚拟桌面的屏幕以及屏幕几何形状等信息的同等功能。

使用QWidget::setScreen() 可在特定显示屏上创建QWidget ;请注意,这并不能将部件移动到虚拟桌面设置中的屏幕上

QAction、QActionGroup

类已移入QtGui 模块。依赖于QtWidgets 中定义的类型(如QAction::menu() 和QAction::setMenu() )的成员函数将作为模板实现,只有在调用时才会实例化

QAbstractButton 类

删除了QAbstractButton::animateClick() 的默认超时参数,以便使用现代连接语法,而无需使用qOverload 

QComboBox 类

QComboBox::setModel() 函数现在是虚拟的

QDateTimeEdit 类

当QDateTimeEdit::setDateTime() 被调用时,如果日期时间的时间规格与QDateTimeEdit 实例的时间规格不一致,日期时间将被转换为QDateTimeEdit 的时间规格。这样,日期时间就能描述相同的时间瞬间,但所使用的术语与QDateTimeEdit 使用的术语相同。在此之前,传递的日期时间中的日期和时间与 widget 的时间规格相结合,而忽略了日期时间的时间规格;这可能会描述与传递的日期时间所描述的时间点不同的时间点。

QAbstractItemView 类

以前返回QStyleOptionViewItem 对象的虚拟 viewOptions() 方法已更名为 initViewItemOption,该方法将初始化一个通过指针传入的QStyleOptionViewItem 对象

通过 widget 的属性为其设计样式

在 Qt 5 中,此类属性的选择器值是枚举值的整数等价物在 Qt 6 中则使用字符串值

实用工具类

QUndoCommand、QUndoStack 和 QUndoGroup

撤消/重做框架中与部件无关的类已移入QtGui 模块

http://www.dtcms.com/a/535707.html

相关文章:

  • Sui 主网升级至 V1.58.3
  • [优选算法专题五.位运算——NO.35~36 只出现一次的数字 II、消失的两个数字]
  • 晶台光耦KL101X:光伏发电系统的安全卫士与效率引擎
  • 普诚PT5139深度解析:功能特性、应用场景与技术优势
  • MCoT在医疗AI工程化编程的实践手册(下)
  • Qwen系列模型:WAN介绍
  • HarmonyOS大型项目架构与模块化开发指南
  • 怎呀做网站网站超级外链
  • 做游戏模型参考的网站保定网站建设制作开发平台
  • 【IoTDB】时序数据库选型迷茫?Apache IoTDB 为何成工业场景优选?
  • Linux系统编程—线程概念与控制
  • (122页PPT)华为初级项目管理培训(附下载方式)
  • GPT-OSS-20B昇腾NPU实战:从模型转换到42.85 tokens/s性能突破
  • 大模型请求/响应参数完全拆解:每个字段都是什么意思?
  • WIFI|硬件 Vanchip射频芯片 VC5776-11设计应用6
  • Java字符串深度解析:从内存模型到常用方法全掌握
  • 1688货源网官方网站专用车网站建设多少钱
  • 网站运营的目的及意义wordpress 颜色选择器
  • 【高阶数据结构】哈希表
  • 【Qt开发】容器类控件(二)-> QTabWidget
  • 模板进阶:从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑
  • Springboot 局域网部署https解除安全警告
  • 封装map和set(红黑树作为底层结构如何实现map和set插入遍历)
  • 如何保证RabbitMQ不出现消息丢失?
  • 购物网站建设 属于信息系统管理与设计么?一个网站的制作特点
  • 如何快速进行时间序列模型复现(以LSTM进行股票预测为例)
  • Git 远程操作:克隆、推送、拉取与冲突解决
  • Telegram 被封是什么原因?如何解决?(附 @letstgbot 搜索引擎重连技巧)
  • uniapp(1)
  • 河北建站公司优化大师的功能有哪些