C

Qt Quick Ultralite 与 Qt Quick 的非 API 级别差异

概述

另见已知问题或限制 列表。

处理图像资源

所有图像需要在构建时注册,使用 Qt Quick Ultralite 资源系统 转换为 Qt Quick Ultralite 资产存储格式。默认情况下,图像将包含在二进制文件中。从外部存储加载图像,如 资源来自外部存储 所述,仍然需要在构建时注册和转换。

图像优化

在某些平台上,如果您使用转换来旋转或缩放图像,可能会从以不同格式编译图像中受益。要启用此优化,请将图像资源上的 QmlProjectProperty ImageFiles.MCU.resourceOptimizeForRotationImageFiles.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中,此示例中的白色区域不会被绘制。这意味着初始的帧缓冲区数据可能可见,并且该区域上的动画将无法正确清除旧的图形。

可以通过使用白色矩形作为根元素显式地提供白色背景。

Rectangle {
    Item {
        width: 200; height: 200
        Rectangle {
            width: 100; height: 100
            anchors.centerIn: parent
            color: "red"
        }
    }
}

根据某些Qt许可证提供。
了解更多信息。