C
安全关键 QML 类型
在 Qt 安全渲染器中,安全关键 UI 元素被实现为 QML 类型。要将这些类型包含到您的应用程序中,您必须将它们添加到 Qt Quick UI Forms (.ui.qml 文件)。本主题介绍了 Qt 安全渲染器 QML 类型。有关如何处理 .ui.qml 文件的信息,请参阅使用 Qt 工具创建安全关键 UI。
Qt 安全渲染器提供以下安全关键 QML 类型
安全关键 QML 类型由 Qt 安全渲染器在 UI 中渲染。它们以原始位图形式渲染。Qt 安全渲染器消息接口定义了系统非安全部分如何与运行时上的安全关键项进行通信。有关更多信息,请参阅安全关键 QML 类型主题。
安全关键 QML 类型还有很多其他属性,下面的部分中并未列出。有关使用属性的信息,请参阅指定项属性。
安全 QML 类型必需属性
如果您使用的是 输出验证,请记住为画布中添加的每个安全 QML 类型定义以下属性
属性 | 描述 |
---|---|
fillColor | fillColor 是必需的,如果您使用输出验证。 |
注意:在 Qt 设计工作室中,您可以设置填充色为全透明或部分透明的颜色。这将导致 qtsafelayouttool 发生断言,因为填充色应该是完全不透明的。
有关更多信息,请参阅输出验证。
SafeImage QML 类型
使用 SafeImage QML 类型,您可以将图像添加到 UI 中。SafeImage 支持在 Qt 图像格式 中列出的图像格式。
如果您使用资源集合文件 (.qrc) 存储您的图像,您可以按以下方式将图像文件添加到 .qrc 文件中
- 在 Qt Creator 中,打开 编辑 模式。
- 在 项目 中,右键单击 .qrc 文件。
- 选择 在编辑器中打开。
- 选择 添加文件。
- 浏览到图像文件,并选择 打开。
有关如何使用 Qt 安全资源编译器工具生成 MISRA 兼容数据结构的更多信息,请参阅启用 Qt 安全资源编译器工具。
您可以使用以下步骤更改 SafeImage 中的图像
- 在 Qt Creator 中,打开 设计 模式。
- 在画布或项导航器中右键单击 SafeImage。
- 在上下文菜单中选择 更改源 URL。
- 浏览到图像文件,并选择 打开。
注意:如果图像的一部分是透明的,您应该设置图像的填充色。否则,安全关键内容可能无法正确显示。您可以通过 属性 编辑填充色。
SafeImage 的示例源代码
SafeImage { id: safeImage1 x: 314 y: 235 width: 65 height: 65 // image added to the .qrc file source: "safeimage.png" }
运行时功能
在运行时,您可以在布局中更改SafeImage的位置。
SafePicture QML 类型
通过 SafePicture QML 类型,您可以为您的 UI 添加安全关键 ISO 图标。
以下步骤将 ISO 图标添加到 SafePicture
- 将 SafePicture 从 组件 拖放到 库 中的画布。
- 在图形元素上右单击,然后选择 选择图标 以打开 ISO 图标浏览器。
- 为了查找图标,选择一个用于筛选图标的条件,并输入搜索字符串。
- 在列表中选择一个图标,然后选择确定添加图标。
您还可以调整图标颜色
- 在画布或导航器中右键单击图标。
- 在上下文菜单中选择 编辑颜色 或打开 属性。
- 选择颜色。
- 在 属性 中,编辑 fillColor。如果使用输出验证,则设置 fillColor 是必须的。
有关更多信息,请参阅ISO 图标浏览器。
在 .pro 文件中,使用的 ISO 图标如下列出
ISO_ICONS += \ iso_grs_7000_4_2423 \ iso_grs_7000_4_0238 \ iso_grs_7000_4_0245 \
SafePicture 的示例源代码
SafePicture { id: safePicture x: 90 y: 226 width: 65 height: 65 source: "qrc:/iso-icons/iso_grs_7000_4_0004.dat" }
运行时功能
在运行时,您可以在布局中更改 SafePicture 的位置。从 Qt Safe Renderer 1.2 开始,您可以在运行时更改 SafePicture 的颜色。该颜色通过使用 SafeRenderer::QSafeEventSetColor 提供的事件来更改。
SafeText QML 类型
通过 SafeText QML 类型,您可以将安全关键文本添加到您的 UI 中。Qt Safe Renderer 在安全文本中使用 Qt 预渲染字体 (QPF2)。在 QML 源代码中的文本可以像任何其他 Qt Quick 代码一样进行国际化。有关更多信息,请参阅Qt Quick 的国际化和本地化。
您可以在 属性 窗口中添加文本。在导航器或画布上突出显示 SafeText 类型后,SafeText 属性将在窗口中显示。
以下是如何在 SafeText 中添加文本
- 在画布或导航器中选择 SafeText。
- 在
SafeText
属性窗口中,将文本输入到 文本 中。
文本的默认颜色是黑色。如果您的视图的背景颜色是黑色,请记住更改 SafeText 的文本颜色
- 在画布或导航器上右键单击 SafeText。
- 在上下文菜单中选择 编辑颜色 或打开 属性。
- 选择颜色。
- 在 属性 中,编辑 fillColor。如果使用输出验证,则设置 fillColor 是必须的。
注意: SafeText 如果字体大小超过 175,则不会正确渲染。
SafeText 的示例源代码
SafeText { id: safeText x: 80 y: 80 width: 129 height: 65 text: "text" }
动态 SafeText
使用动态 SafeText,您可以在运行时更改 SafeText QML 类型中的文本。从 Qt Safe Renderer 1.1 开始提供动态 SafeText。您可以如下启用动态 SafeText
- 在画布或导航器中选择 SafeText。
- 在
SafeText
属性窗口中,启用 动态。
在生成的 QML 源代码中,将 runtimeEditable 属性设置为 true
。
当你在构建包含动态SafeText类型的Qt Quick项目时,对于你在动态SafeText QML类型中使用的每种字体类型,都会生成一个.qpf2文件。如果runtimeEditable属性保留为其默认值false
,则会生成一个.srb文件。有关生成的文件的更多信息,请参阅生成安全布局数据。
注意:国际化与本地化在动态文本中不受支持。
运行时功能
在运行时,您可以更改布局中SafeText的位置。从Qt Safe Renderer 1.1开始,您还可以在运行时更改文本和颜色。
有关更改文本的更多信息,请参阅动态SafeText。
您可以通过使用SafeRenderer::QSafeEventSetColor提供的事件在运行时更改颜色。
本地化安全关键QML类型
您可以使用本地化位图和静态文本在安全关键的QML类型中使用。
按照以下方式将本地化位图添加到您的项目,通过Qt资源文件 (.qsr)
<RCC> <qresource prefix="/" lang="fi"> <file alias="flag.png">flags/fi.png</file> </qresource> <qresource prefix="/" lang="en"> <file alias="flag.png">flags/gb.png</file> </qresource> </RCC>
有关Qt中资源编译器(rcc)的更多信息,请参阅资源编译器(rcc)。
使用qsTr
函数标记以下文本以进行翻译:
SafeText { id: textItem objectName: "textItem" height: 84 width: 384 color: "black" verticalAlignment: Text.AlignVCenter font.pixelSize: 64 fillColor: "white" text: qsTr("Hello world!") }
不同语言的翻译提供在单独的翻译文件 (.ts) 中。有关更多信息,请参阅使用Qt Quick进行国际化与本地化和Qt Linguist手册。
有关Qt Safe Renderer中本地化的更多信息,请参阅以下主题:
预览Qt Quick UI表单
通过QML场景预览
您可以使用以下方式预览创建的Qt Quick UI表单 (.ui.qml)
- 在Qt Quick Designer或Qt Creator的编辑模式下打开Qt Quick UI表单。
- 选择工具 > 外部 > Qt Quick > Qt Quick 2预览(qmlscene)。
QML Scene允许您在开发应用程序时加载QML文档进行查看和测试。
如果您已经通过使用ISO图标浏览器将SafePicture QML类型添加到您的UI表单,生成的代码包含一个qrc:/
前缀
SafePicture { id: safePicture1 x: 182 y: 135 source: "qrc:/iso-icons/iso_grs_7000_4_0001.dat" }
如果前缀在QML代码中,QML Scene不会渲染图标。在使用QML Scene之前,您需要手动删除它。
source: "iso-icons/iso_grs_7000_4_0001.dat"
运行项目
您可以通过运行项目预览UI表单。要运行项目,请选择构建 > 运行。
如果您已将安全性关键元素添加到Qt Quick应用程序 - 栈项目中的Qt Quick UI表单,则应该在启用Qt Safe Renderer工具之前就能运行项目。有关工具和必需的项目文件修改信息,请参阅在项目中启用Qt Safe Renderer。
约束
Qt Safe Renderer QML类型具有以下约束:
- 动态SafeText不支持本地化。
- Qt Safe Renderer QML类型不能在由Qt Quick View QML类型定义的视图中使用。
- 支持的位置器包括列、行、锚点和绝对x坐标和y坐标。
- objectName 和 id 必须相等。否则将抛出未处理的异常。
通常情况下,不应将 Qt 安全渲染器的 QML 类型与常规 Qt Quick QML 类型(如 MouseArea)混合使用。特别是,Qt 安全渲染器不支持以下功能和类型在 Qt Quick UI 表单文件中:
不支持的功能 |
---|
JavaScript 块 |
函数定义 |
函数调用(除非是 qsTr()) |
纯表达式之外的绑定 |
信号处理器 |
在根项之外的其他项的状态 |
不是从 QQuickItem 或 Item 派生的根项 |
不支持的类型 |
行为 |
绑定 |
画布 |
组件 |
着色器效果 |
定时器 |
变换 |
在某些 Qt 许可证下可用。
了解更多。