使用状态
您可以通过选择 在 状态 视图中为组件和组件实例定义状态。
点击新状态,切换到 2D 和 3D 视图中的该状态,然后修改组件或组件实例的属性值。
例如,要改变按钮的外观,您可以在按钮组件中定义状态来隐藏按钮图片或替换为另一张图片,或改变按钮的背景或文本颜色。当您在其他组件中使用按钮的实例时,您可以定义状态来回退或显示按钮组件实例以创建不同的屏幕。组件中的预设 按钮 控制在 组件 > Qt Quick 控件 > 控件 中具有预定义的 正常 和 按下 状态。
这同样适用于您可以使用 向导模板 创建的自定义按钮组件。有关在按钮组件内编辑状态以及隐藏和显示按钮来创建多个屏幕的更多信息,请参阅 登录 UI - 组件 和 登录 UI - 状态。
要向屏幕添加动作,您可以在 2D 视图中改变组件实例的位置,然后向状态间的变化添加动画。
您在状态中更改的属性会以蓝色突出显示。在 代码 视图中,您可以看到将更改作为基本状态的变化记录。
注意:如果您已在 导航器 中锁定了一个组件,并且您尝试删除改变其属性值的子状态,系统会提示您确认删除。
有关更多信息,请观看以下视频
设置默认状态
默认状态决定了应用程序的启动状态。
要将状态设置为默认状态,请选择 默认。
应用状态
要确定何时应用状态,在“条件”字段中选择 。在绑定编辑器中,指定状态的when属性。将属性的值设置为当您想要应用状态时求值为true
的布尔表达式。
这使您能够评估多个组件属性的准确性,并将UI移动到满足这些条件的状态。您可以评估某个事物是真还是假,大于或等于其他事物,等等。您还可以使用运算符,如AND或OR,来评估多个组件的准确性。
当条件从左到右按照在代码中出现的顺序进行评估。因此,如果您有两个状态的条件都评估为true
,则第一个状态将被应用。
在绑定编辑器中,选择要将表达式创建为表达式的组件和属性。例如,要更改按钮按下时的状态,可以选择按钮组件及其按下属性。
在绑定编辑器中构造表达式时,代码补全功能会列出您可以用于表达式的组件及它们的属性。
逻辑运算符摘要
您可以在表达式中使用以下逻辑运算符来将多个条件组合在一个表达式中。
运算符 | 意义 | 如果以下条件满足,则求值为true |
---|---|---|
! | NOT | 条件未满足。 |
&& | AND | 两个条件都满足。 |
|| | OR | 任一条件满足。 |
< | 小于 | 左操作数小于右操作数。 |
> | 大于 | 左操作数大于右操作数。 |
>= | 大于等于 | 左操作数大于或等于右操作数。 |
<= | 小于等于 | 左操作数小于或等于右操作数。 |
== | 等于 | 操作数相等。 |
=== | 严格等于 | 操作数相等且类型相同。 |
!= | 不等于 | 操作数不相等。 |
!== | 严格不等于 | 操作数为同一类型但数值不相等,或者类型不同。 |
或者,您可以使用AND运算符,OR运算符和NOT运算符组件,使用布尔AND,OR和NOT运算符绑定属性值。有关更多信息,请参阅逻辑助手。
此外,您可以在检查之前使用算术运算符来比较数字。但是,我们建议在可能的情况下创建用于此目的的单独属性。
当条件的示例
要将状态应用于按钮,当按钮被按下时,可以简单地写下:
when: control.pressed
要将状态应用于按钮未被按下时,选择NOT复选框。
要将状态应用于按钮未被按下、未选择也未悬停时,可以组合条件,如下所示:
when: !control.pressed && !control.checked && !control.hovered
要将状态应用于按钮被按下或被选择,但未悬停时,可以写下:
when: control.pressed || control.checked && !control.hovered
如果您不熟悉编写表达式,您可以使用从“组件”>“Qt Quick Studio 逻辑助手”预设的逻辑助手。
使用状态
为了保持代码整洁,您应该创建一个包含您将在应用程序中需要的所有组件的基本状态。然后,您可以创建状态,其中隐藏和显示一组组件以及修改它们的属性。这允许您
- 将不同视图中的组件对齐。
- 避免过多的属性更改。如果一个组件在基本状态中不可见,您必须将其子组件的所有更改定义为属性更改,这将导致代码复杂。
- 将基本状态与其他状态之间的差异最小化,以保持代码简短、可读并提高性能。
- 避免在更改状态时使用转换和动画的问题。
使用状态创建应用程序的视图
- 在基本状态下,添加您将在应用程序中需要的所有组件(1)。当您在一个视图上工作时,您可以在导航器中单击图标来隐藏画布上不属于视图的组件。
- 在状态中,选择+符号以创建新状态并为其命名。例如,
正常
。 - 在属性(2)中,禁用不需要在此视图中的每个组件的可见性复选框或将其不透明度设置为0。如果您指定父组件的设置,所有子组件都将继承它并也隐藏。
- 为每个视图创建附加状态并设置视图中的组件的可见性或不透明度。
- 要确定应用程序启动时应用的状态,请选择默认值。
状态组
使用状态组,您可以为某些组件的状态更改独立于同一视图中的其他组件及其状态。
每个状态组都有其自己的属性更改和转换。
默认情况下有一个默认状态组。
扩展状态
当一个状态扩展另一个状态时,它会继承该状态的全部更改。被扩展的状态被视为扩展状态指定的更改的基础状态。
使用扩展状态可以使用户界面和您的QML代码更干净。
以下是一个示例,其中状态1和状态2之间的唯一区别是directionalLight的亮度。
这里,扩展状态没有被使用
这里,状态2是从状态1扩展的
在特定的Qt许可证下可用。
了解更多。