C
已知问题或限制
以下是在 Qt for MCUs 2.8.0 中已知的列表。如果您想要关于这些问题的规避方法或状态信息,请联系 Qt 支持团队。
要查看所有用户报告的问题,请访问 Qt for MCUs 公共错误跟踪系统。
Qt Quick Ultralite
- Qt Quick Ultralite 是 Qt Quick 的一个子集,因此不提供所有基础和控制 QML 类型,这些类型在非 MCU 平台上可用。有关更多信息,请参阅 Qt Quick Ultralite 与 Qt Quick 的比较 和 Qt Quick Ultralite 控制与 Qt Quick 控制的差异。
- 如果使用静态字体引擎,则 Text 类型无法正确渲染需要 复杂文本布局 的 Unicode 字符序列。请使用 Monotype Spark 字体引擎 来处理复杂文本。
- SequentialAnimation 和 ParallelAnimation 在使用 "on" 语法赋给属性时不会自动启动。要启动动画,请显式设置 running 属性为
true
。 - font.pointSize 不遵循屏幕 DPI。建议使用 font.pixelSize。
- 默认状态有一些限制。有关更多信息,请参阅 默认状态限制。
- 绑定到 Item 的 state 属性仅在目标状态不使用 when 条件时才有效。应使用两种方法之一通过表达式更改状态。
- 在同一项上针对多个 PropertyChanges 或 AnchorChanges 目标锚定属性执行 States 时,会遇到问题。建议使用单个 PropertyChanges。
- 将锚点设置到 未定义 将不会恢复先前的位置和大小绑定。
- 在一个转换中,RotationAnimation 可能应用到非旋转属性上。请使用 PropertyAnimation::properties 替代。
- 在 ListView 中的所有委托都应有相同的大小。大小必须显式指定,且不能动态更改。
- 不支持对分组属性使用
onPropertyChanged
。 - 不支持在 颜色值访问器 上绑定。
- 不支持在 clip 属性上使用 transformed 项目。
- 对项目上的 Transforms 不会应用到该项目的子项上。反而应分别对每个子项设置变换。
- AnimatedSprite 不提供
finishBehavior
属性,当动画完成时它会停留在最后一帧。如你想提供像 Qt Quick 中的默认行为,使用 finished 信号和 currentFrame 属性。 - AnimatedSprite 和 AnimatedSpriteDirectory 的 frameDuration 属性并不能保证每帧之间的准确持续时间。这意味着下一帧应在给定时间间隔后渲染。平台的工作能力可能会影响到时间间隔。
- 不支持定义具有相同枚举值的枚举。更多信息,见 枚举。
- Qul::ListModel<std::string> 将返回一个空字符串。为了避免这个问题,像以下示例一样,在结构中包裹类型
struct ModelData { std::string text; }; class MyModel: public Qul::ListModel<ModelData> { ... };
- 定义在 C++ 中并通过 InterfaceFiles.files 导出的 QML 对象不能在 Loader 中使用。
Loader { source: "MyCppType.qml" // ^ error: File MyCppType.qml does not exist. }
为了避免这个问题,创建一个 QML 文件,使用 MyCppType,并用该 QML 文件名作为源。
// MyQmlType.qml Item { // Note: The root item has to be a visual type! MyCppType { // ... } }
Loader { source: "MyQmlType.qml" }
- 组件使用。
当与 Repeater 或 ListView 一起使用时,组件根项目中的 'parent' 访问器会打印错误 "在不受支持的上下文中引用组件 'parent'"。
这个方法是不行的
Component { id: myComp Rectangle { width: parent.width height: parent.height / 2 color: "pink" } } Repeater { model: 1 // Referencing Component via id where the root item uses parent.* accessor delegate: myComp }
作为一种解决方案,请使用被引用对象的 'id' 而不是 'parent' 访问器。
在组件内部使用锚点时,还有其他各种问题。如果生成的 C++ 代码无法编译,请尝试在不使用有问题的锚点绑定的情况下编写相同的逻辑。已知底层问题,但尚未在此版本中修复。
Qt Creator
- 不支持 QML 调试
- 不支持 QML 分析
Qt Design Studio
- 设备端预览不支持。要在 MCU 板上预览设计,请使用自动生成的 CMake 项目,并用 Qt Creator 编译它。
平台
瑞萨平台
瑞萨 RH850-D1M1A
以下是关于瑞萨 RH850-D1M1A 硬件已知的问题或限制列表。
- 由于本平台上没有实现
enterSleepMode
,Qt Quick Ultralite 2.8.0 不会进入低 CPU 功耗模式。如果没有帧被渲染并且没有其他任务在运行,Qt Quick Ultralite 会不断循环,直到下一帧需要渲染或需要 CPU 时间执行其他任务。
瑞萨 EK-RA6M3G
以下是瑞萨 EK-RA6M3G 硬件已知的问题或限制列表。
- 由于评估套件板上的 RAM 较少且不存在 SDRAM,不支持资源预加载。
- 默认使用单缓冲技术,因为内存资源有限。这可能会导致屏幕闪烁。可以从瑞萨e²工作室图形LCD(
r_glcdc
)堆栈配置中启用双缓冲。 - 为了防止出现视觉伪影,尽量减少使用需要通过CPU进行混合的旋转或透视变换的图像。在
Release
模式下重新构建Qt Quick Ultralite核心库可能有助于减少此类伪影。
NXP平台
NXP i.MXRT1170
以下是在NXP i.MXRT1170硬件上已知的问题或限制列表。
- Qt Quick Ultralite 2.8.0不会进入低CPU功耗模式。在正常情况下,当Qt Quick Ultralite不更新应用程序UI或没有新触摸事件要处理时,它会进入此模式。由于该平台会干扰调试和烧录,因此禁用了低CPU功耗模式。
- 参考平台端口对硬件层支持有限。
STM32平台
由于SDRAM带宽有限,在显示控制器扫描帧缓冲区时,CPU访问SDRAM可能会导致视觉伪影,因为LTDC FIFO下溢。在有很多UI元素和大量动画的应用程序中,可能会出现LTDC FIFO下溢
错误,造成视觉中断。除了简化UI之外,考虑使用Qt Quick Ultralite核心库的不同构建类型。例如,使用Debug
或Release
而不是MinSizeRel
。
STM32F469I-DISCOVERY
以下是在STM32F469I-DISCOVERY硬件上已知的问题或限制列表。
- STM32F469NI不支持双精度浮点运算。
STM32H750B-DISCOVERY
以下是在STM32H750B-DISCOVERY硬件上已知的问题或限制列表。
- 仅支持SDK版本1.11.1。
其他
- 为了绕过GNU Arm嵌入式工具链的缺陷(https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966),将所有目标文件和库作为链接器组通过
ld
传递(使用--start-group
/--end-group
)。此外,库在将应用程序目标文件传递给链接器之前传递,这与默认行为相反。 - 使用GNU Arm GDB 10.3-2021.10进行目标调试可能导致崩溃(
内部错误:虚拟内存耗尽
)。您可以通过在进行GNU Arm GCC 10之前,将-g3
选项替换为-g
在lib/cmake/Qul/toolchain/armgcc.cmake
中,或者使用GNU Arm GCC 9作为工具链,来避免崩溃。 - 资源系统中的Unicode文件名可能导致Windows上构建错误。可以使用正确的Ninja和CMake版本来解决这个问题。内嵌工具已经过验证,支持Unicode文件名。
- 在Linux上,如果您没有安装
g++-12
,而在 include 路径中使用了gcc-12
,则运行qmlinterfacegenerator
时会导致缺少C++头文件(《'cstdint'
文件未找到》)的问题。要么删除gcc-12
,要么安装g++-12
以解决这个问题。
根据某些Qt协议提供。
了解更多。