QT - QML 状态(State)

QT - QML 状态(State)

详细说明

状态是一组基于默认配置的批量改变。

所有组件均具有默认状态,该状态定义对象和属性值的默认配置。可以通过向States属性添加State组件来定义新状态,以允许组件在不同配置之间切换。例如,这些配置可用于应用不同的属性值集或执行不同的脚本。

以下示例显示一个Rectangle。在默认状态下,矩形被涂成黑色。在“单击”状态下,PropertyChanges对象将矩形的颜色更改为红色。在MouseArea中单击可在默认状态和“单击”状态之间切换矩形的状态,从而在黑色和红色之间切换矩形颜色。

  import  QtQuick  2.0

  Rectangle  {
      id:  myRect
      width:  100;  height:  100
      color:  "black"
      MouseArea  {
          id:  mouseArea
          anchors.fill:  parent
          onClicked:  myRect.state  ==  'clicked'  ?  myRect.state  =  ""  :  myRect.state  =  'clicked';
      }

      states:  [
          State  {
              name:  "clicked"
              PropertyChanges  {
                  target:  myRect;
                  color:  "red"
              }
          }
      ]
  }

请注意,默认状态是使用空字符串(“”)引用的。
状态通常与转场动画一起使用,以在状态发生变化时提供动画。
注意:不允许从同一对象的另一个状态内设置对象的状态。
**另请参见“状态” 示例,“ Qt快速状态”,“ 过渡 ”和“ Qt QML”

属性

  • [default]changes : list<Change>
    此属性保存适用于此状态的更改
    默认情况下,这些更改将应用​​于默认状态。如果状态扩展了另一个状态,则将针对扩展状态应用更改。
  • extend : string
    此属性保留此状态扩展的状态。
    当一个状态扩展到另一个状态时,它将继承该状态的所有更改。
    关于扩展状态所指定的更改,被扩展的状态被视为基本状态。
  • name : string
    此属性保存状态的名称。
    每个状态在其项目内应具有唯一的名称。
  • when : bool
    该属性在应用状态成立时生效。
    应该将其设置为一个表达式,您希望何时应用状态时使该表达式的计算结果为true。例如,当按下MouseArea时,以下Rectangle更改为进入和退出“隐藏”状态:
  Rectangle  {
      id:  myRect  width:  100;  height:  100  color:  "red"

      MouseArea  {
          id:  mouseArea;
          anchors.fill:  parent
      }

      states:  State  {
          name:  "hidden";
          when:  mouseArea.pressed
          PropertyChanges  {
              target:  myRect;
              opacity:  0
          }
      }
  }

如果组中的多个状态具有when同时求值的子句,true则将应用第一个匹配状态。例如,在以下代码段中,state1将始终选择该代码段,而不是state2在sharedCondition变为时true。

    Item  {
      states:  [
          State  {
              name:  "state1";
              when:  sharedCondition
          },
          State  {
              name:  "state2";
              when:  sharedCondition
          }
      ]
      // ...
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容