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 字体引擎 来处理复杂文本。
  • SequentialAnimationParallelAnimation 在使用 "on" 语法赋给属性时不会自动启动。要启动动画,请显式设置 running 属性为 true
  • font.pointSize 不遵循屏幕 DPI。建议使用 font.pixelSize
  • 默认状态有一些限制。有关更多信息,请参阅 默认状态限制
  • 绑定到 Item 的 state 属性仅在目标状态不使用 when 条件时才有效。应使用两种方法之一通过表达式更改状态。
  • 在同一项上针对多个 PropertyChangesAnchorChanges 目标锚定属性执行 States 时,会遇到问题。建议使用单个 PropertyChanges
  • 将锚点设置到 未定义 将不会恢复先前的位置和大小绑定。
  • 在一个转换中,RotationAnimation 可能应用到非旋转属性上。请使用 PropertyAnimation::properties 替代。
  • ListView 中的所有委托都应有相同的大小。大小必须显式指定,且不能动态更改。
  • 不支持对分组属性使用 onPropertyChanged
  • 不支持在 颜色值访问器 上绑定。
  • 不支持在 clip 属性上使用 transformed 项目。
  • 对项目上的 Transforms 不会应用到该项目的子项上。反而应分别对每个子项设置变换。
  • AnimatedSprite 不提供 finishBehavior 属性,当动画完成时它会停留在最后一帧。如你想提供像 Qt Quick 中的默认行为,使用 finished 信号和 currentFrame 属性。
  • AnimatedSpriteAnimatedSpriteDirectoryframeDuration 属性并不能保证每帧之间的准确持续时间。这意味着下一帧应在给定时间间隔后渲染。平台的工作能力可能会影响到时间间隔。
  • 不支持定义具有相同枚举值的枚举。更多信息,见 枚举
  • 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"
    }
  • 组件使用。

    当与 RepeaterListView 一起使用时,组件根项目中的 '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核心库的不同构建类型。例如,使用DebugRelease而不是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选项替换为-glib/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协议提供。
了解更多。