【写在前面】
最近使用 Qt6 有一段时间了,其实对于 Qml 来说,语法上的变动不是很大。
不过在一些组件的使用中发现很多效果和以前不太一样。
另一方面,Qt5 (Qml) 中一些比较常用的也消失了,并且没有直接替代,需要注意。
其中,影响最大的是 移除了 QtQuick.Controls 1.x 和 QtGraphicalEffects 移动到 Qt5Compat
模块中。
而对于 Qt C++ 部分,影响最大的则是 QTextCodec ,并且没有直接替代 ( Qt6 提供的
QStringConverter / QStringEncoder / QStringDecoder 不能完全替代 )。
【正文开始】
1、Qt C++ 中的 Core5Compat:
在 Qt5 中,这些类位于 Qt Core 中,Qt6 移动到 Qt Core5Compat,要使用它们:
对于 qmake: QT += core5compat
对于 cmake:
find_package(Qt6 COMPONENTS Core5Compat REQUIRED)
target_link_libraries(mytarget PUBLIC Qt6::Core5Compat)
QLinkedList提供链表的模板类--- / 建议使用 std:list
QLinkedList::const_iterator提供一个 STL 风格的 const 迭代器---
QLinkedList::iterator提供一个 STL 风格的非 const 迭代器---
QLinkedListIteratorJava 风格的常量迭代器---
QMutableLinkedListIteratorJava 风格的非常量迭代器---
QRegExp使用正则表达式进行模式匹配弃用,使用 QRegularExpression 替代
QStringRef围绕 QString 子字符串的薄包装器弃用,使用 QStringView 替代
QTextCodec文本编码之间的转换--- / QStringConverterr 部分替代
QTextDecoder基于状态的解码器--- / QStringDecoder 部分替代
QTextEncoder基于状态的编码器--- / QTextEncoder 部分替代
QXmlAttributesXML 属性弃用
QXmlContentHandler报告 XML 数据的逻辑内容的接口弃用
QXmlDTDHandler报告 XML 数据的DTD内容的接口弃用
QXmlDeclHandler报告 XML 数据的声明内容的接口弃用
QXmlDefaultHandler所有 XML 处理程序类的默认实现弃用
QXmlEntityResolver用于解析 XML 数据中包含的外部实体弃用
QXmlErrorHandler报告 XML 数据中的错误的接口弃用
QXmlInputSourceQXmlReader 子类的输入数据弃用
QXmlLexicalHandler告XML数据的词法内容的接口弃用
QXmlLocatorXML 处理程序类,包含有关文件中解析位置的信息弃用
QXmlNamespaceSupportHelper 类,用于希望包含命名空间支持的 XML 阅读器弃用
QXmlParseException用于使用 QXmlErrorHandler 接口报告错误
用于 XML 阅读器(即解析器)的 QXmlReader 接口弃用
QXmlReaderXML 阅读器(即解析器)的接口弃用
QXmlSimpleReader一个简单的 XML 解析器的实现弃用,使用 QXmlStreamReader 替代
要注意的是:弃用的可能在未来版本删除,不建议使用。
并且,如果不使用 Core5Compat,则需要使用第三列的建议改写代码。
2、Qml 中的 Qt5Compat:
所有以前位于 QtGraphicalEffects 的移动到 Qt5Compat.GraphicalEffects 中。
Qt6 使用时只需 import Qt5Compat.GraphicalEffects 即可。
【结语】
截止到目前,最新的 Qt 版本为 Qt 6.4,但发现仍然有不少问题,因此并不建议升级。
另外,Qt5Compat.GraphicalEffects 模块中的部分组件效果和原来并不一样,需要使用其他方法替代。