【写在前面】
最近使用 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 迭代器 | --- |
QLinkedListIterator | Java 风格的常量迭代器 | --- |
QMutableLinkedListIterator | Java 风格的非常量迭代器 | --- |
QRegExp | 使用正则表达式进行模式匹配 | 弃用,使用 QRegularExpression 替代 |
QStringRef | 围绕 QString 子字符串的薄包装器 | 弃用,使用 QStringView 替代 |
QTextCodec | 文本编码之间的转换 | --- / QStringConverterr 部分替代 |
QTextDecoder | 基于状态的解码器 | --- / QStringDecoder 部分替代 |
QTextEncoder | 基于状态的编码器 | --- / QStringEncoder 部分替代 |
QXmlAttributes | XML 属性 | 弃用 |
QXmlContentHandler | 报告 XML 数据的逻辑内容的接口 | 弃用 |
QXmlDTDHandler | 报告 XML 数据的DTD内容的接口 | 弃用 |
QXmlDeclHandler | 报告 XML 数据的声明内容的接口 | 弃用 |
QXmlDefaultHandler | 所有 XML 处理程序类的默认实现 | 弃用 |
QXmlEntityResolver | 用于解析 XML 数据中包含的外部实体 | 弃用 |
QXmlErrorHandler | 报告 XML 数据中的错误的接口 | 弃用 |
QXmlInputSource | QXmlReader 子类的输入数据 | 弃用 |
QXmlLexicalHandler | 告XML数据的词法内容的接口 | 弃用 |
QXmlLocator | XML 处理程序类,包含有关文件中解析位置的信息 | 弃用 |
QXmlNamespaceSupport | Helper 类,用于希望包含命名空间支持的 XML 阅读器 | 弃用 |
QXmlParseException | 用于使用 QXmlErrorHandler 接口报告错误 用于 XML 阅读器(即解析器)的 QXmlReader 接口 | 弃用 |
QXmlReader | XML 阅读器(即解析器)的接口 | 弃用 |
QXmlSimpleReader | 一个简单的 XML 解析器的实现 | 弃用,使用 QXmlStreamReader 替代 |
要注意的是:弃用的可能在未来版本删除,不建议使用。
并且,如果不使用 Core5Compat,则需要使用第三列的建议改写代码。
2、Qml 中的 Qt5Compat:
所有以前位于 QtGraphicalEffects 的移动到 Qt5Compat.GraphicalEffects 中。
Qt6 使用时只需 import Qt5Compat.GraphicalEffects 即可。
【结语】
截止到目前,最新的 Qt 版本为 Qt 6.4,但发现仍然有不少问题,因此并不建议升级。
另外,Qt5Compat.GraphicalEffects 模块中的部分组件效果和原来并不一样,需要使用其他方法替代。