C
Qt Quick Ultralite 与 Qt Quick 的非 API 级别差异
概述
- ECMAScript 支持有限
- 图像资源处理不同
- 图像可能针对旋转或缩放进行了优化
- 模型、视图和代理的差异
- 状态 只能在每个 QML 文件的根项中使用
- 动画 不能用作信号处理程序(例如,
onClicked: PropertyAnimation { ... }
) - 支持有限数量的 缓动曲线
- 无法引用在另一个文件中声明的组件的 id
- 应用程序不在白色背景上绘制
另见已知问题或限制 列表。
处理图像资源
所有图像需要在构建时注册,使用 Qt Quick Ultralite 资源系统 转换为 Qt Quick Ultralite 资产存储格式。默认情况下,图像将包含在二进制文件中。从外部存储加载图像,如 资源来自外部存储 所述,仍然需要在构建时注册和转换。
图像优化
在某些平台上,如果您使用转换来旋转或缩放图像,可能会从以不同格式编译图像中受益。要启用此优化,请将图像资源上的 QmlProjectProperty ImageFiles.MCU.resourceOptimizeForRotation 或 ImageFiles.MCU.resourceOptimizeForScale 设置为图像资源。示例
ImageFiles{ files: ["images/my_image.png"] MCU.resourceOptimizeForRotation: true MCU.resourceOptimizeForScale: true }
在应用程序中,图标图像通常只有单色和具有 alpha 透明度。Qt Quick Ultralite 会检测此类图像并以优化的 alpha 映射格式存储它们。只要图像只有一种颜色即可正常工作。如果图像具有大透明边界,则图像将自动裁剪。
脚本表达式
Qt Quick Ultralite不完全支持ECMAScript语言规范,并且只实现了API的最小子集。然而,在某些情况下,您仍然可以使用脚本表达式。
- 在属性绑定体中。这些脚本表达式描述了QML对象属性之间的关系。当属性依赖项发生变化时,属性会根据指定的关系自动更新。
- 在信号处理程序体中。这些脚本语句在QML对象发出相关信号时自动评估。
- 在自定义方法定义中。定义在QML对象体内的脚本函数成为该对象的方法。
Qt Quick Ultralite不支持使用独立的JavaScript资源文件(.js)。由于当您定义自定义脚本方法时,脚本代码会转换成C++代码,因此声明参数类型非常重要。如果方法返回一个值,则需要在方法签名内声明返回类型。在函数内部,可以使用var
变量,但它们必须初始化以确保可以推断出类型。
function getColor(i : int, pressed: bool) : color { var isEven = i % 2 == 0 if (pressed) { return "#AAFFAA" } else if (isEven) { return "#AACCAA" } return "#CCAACC" }
模型-视图-代理模式
模型
在Qt Quick Ultralite中,ListModels是只读的,对定义在单独文件中的模型存在一定的限制。有关详细信息,请参阅Qt Quick Ultralite中的模型和视图。
角色访问
与Qt Quick不同,只有在代理中声明了相应的必备属性时,才允许在角色上使用未指定名称的访问。
ListModel {
id: model
ListElement {
cost: "2.45"
}
}
ListView {
model: model
delegate: Text {
required property string cost
text: cost
}
}
代理
Qt Quick Ultralite要求代理必须在其使用的同一文件中声明。
为了优化运行时内存占用并避免动态分配,创建了有限的代理。编译时估计确切的代理数,估计基于视图容器的大小和代理的大小。
创建的代理数比可见的代理数多。例如,这可以实现平滑滚动的效果。一旦代理变为不可见,它可以被复用并填充与即将变为可见元素对应的数据。
无白色背景
Qt Quick Ultralite不会在白色背景上绘制应用程序。应用程序必须确保没有透明区域,以避免渲染伪影。
例如,以下在Qt Quick中以白色背景绘制红色矩形
Item { width: 200; height: 200 Rectangle { width: 100; height: 100 anchors.centerIn: parent color: "red" } }
在Qt Quick Ultralite中,此示例中的白色区域不会被绘制。这意味着初始的帧缓冲区数据可能可见,并且该区域上的动画将无法正确清除旧的图形。
可以通过使用白色矩形作为根元素显式地提供白色背景。
根据某些Qt许可证提供。
了解更多信息。