1 Item

alt text

  • Item类型是所有可视化类型的基类,Item类型是在QtQuick中。Item是继承于QtObject元素。

  • QtQuick中所有可视项都继承自Item。尽管Item对象没有视觉外观,但他定义了所有视觉类型的基本属性,比如x,y位置,宽高以及锚点等。

  • Item类型可以作为根元素包含视觉项目。

    import QtQuick 2.0
    
    Item {
        Image {
            source: "tile.png"
        }
        Image {
            x: 80
            width: 100
            height: 100
            source: "tile.png"
        }
        Image {
            x: 190
            width: 100
            height: 100
            fillMode: Image.Tile
            source: "tile.png"
        }
    }
    

2 Item属性

2.1 clip(bool)

该属性表示是否启用了裁剪。默认的 clip 值为 false

如果启用裁剪,项目item将会裁剪自身的绘制内容,以及子项的绘制内容,使其限制在边界矩形内。

代码参考:/assets/Qt6/qml_13_Flicked/01_DisplayLargeImg.qml

alt text

2.2 containmentMask(QObject *)

该属性表示用于 contains() 方法的可选遮罩mask。它的主要用途是确定pointer event(如鼠标、触控板或触摸屏)相关的操作事件是否落入item中。

Item 是通过 contains() 函数来判断是否处于区域内的,但是其默认只判断了矩形范围,并没有对圆角或者图形裁剪等做判断。

给containmentMask赋值的时候,有两种情况:

  1. 可以使用其他Item直接赋值

  2. 使用QtObject赋值,编写相应的 contains() 函数。

以下前两个就是使用Item赋值,第三个是使用 QtObject 编写 contains() 函数。

  1. 通过一个 Item 指定其范围指定 contains() 响应。比如:写一个Rectangle,进入另一个Rectangle,就会触发。例子参考:/assets/Qt6/qml_02_Item/containmentMask_Rect.qml

    alt text

  2. 通过一个 Shape 路径指定 contains() 响应。

    alt text

  3. 通过编写 contains() 函数。返回TRUE,表示在范围内。

    alt text

默认情况下,contains() 方法对于项目边界框内(比如规则矩形)的任何点都会返回 true。containmentMask 允许更细粒度的控制。例如,如果使用自定义的 C++ QQuickItem 子类,具有专门的 contains() 方法作为 containmentMask

2.3 Layer

2.3.1 layer.enabled(bool)

一个 Item 通常会直接渲染到它所属的窗口中。然而,通过设置 layer.enabled,可以将该Item(以及所有子元素)都会保存到离屏渲染Surface中,此时,只有离屏渲染Surface(其实就是该Surface的内容,也可以看作是一个纹理)会被绘制到窗口中。

如果使能 layer.enabled ,反而感觉是不分层了,或者可以理解为只有一个新的纹理层了。使能后,会把所有含有的元素,叠加到一个层。所以才会有以下不同之处。

alt text

如果给Item里面的每个矩形设置0.5的透明度,无论是否使能 layer.enabled 都会出现下面效果。

alt text

2.3.2 layer.effect(Component)

如果使能 layer.enabled,其实就会使得这个 Item 变成一个纹理提供者。

  1. 可以看成是一个纹理显示元素。通常与OpenGL相结合,实现显示OpenGL纹理。(参考:2023-09-19-25-QML之ShaderEffectalt text

  2. 可以与一些渲染阴影、渐变元素相结合。(LinearGradient、Glow等,参考 :2023-09-19-16-QML之Graphs(2D).mdalt text