QML-添加透明背景、边框和阴影效果、Column和ColumnLayout区别?

发布于:2024-07-23 ⋅ 阅读:(61) ⋅ 点赞:(0)

添加透明背景、边框和阴影效果

可以使用 ShaderEffectDropShadowShaderEffect 用于自定义渲染,而 DropShadow 用于阴影效果。以下是一个示例,展示如何在 QML 中实现这些效果:

ShaderEffect 用于自定义渲染,而 DropShadow 用于阴影效果。

        Rectangle{
            id:right_framework
            color:"transparent"
            width: 100
            height: parent.height
            //35透明度
            border.color:"#58FFFFFF"
            border.width: 1.5
            radius:10
            Layout.fillHeight: true
            //DropShadow添加阴影
            layer.enabled: true
            layer.effect: DropShadow{
                horizontalOffset: 5
                verticalOffset: 5
                radius:10
                color: "#66000000"
                samples:19
            }
            ShaderEffect{
                anchors.fill:parnet
                fragmentShader: "
                    varying highp vvfec2 qt_TexCoord0;
                    uniform lowp float qt_Opacity;
                    void main() {
                        gl_FragColor = vec4(1.0, 1.0, 1.0, 0.5) *               qt_Opacity;
                    }
            "
            }

        }
  1. DropShadow: 使用 DropShadow 效果在 layer.effect 中添加阴影。
  2. ShaderEffect: 在每个 Rectangle 内使用 ShaderEffect 添加自定义着色器。该着色器将背景颜色设置为带有透明度的颜色。在这里,我们使用了 vec4(1.0, 1.0, 1.0, 0.5) 作为透明背景颜色。
  3. Rectangle: 定义两个矩形框 (left_frameworkright_framework),设置 colortransparent,并设置边框颜色、宽度和圆角半径。

`Column` 和 `ColumnLayout` 区别

它们的主要区别在于它们的布局管理方式和功能。以下是对它们的详细解释和区别:

### 1. `Column`

- **作用**: `Column` 是一个简单的布局容器,用于将子项垂直排列。
- **属性**:
  - `anchors`、`spacing`、`padding` 和 `margins` 用于设置子项之间的间距和布局的外边距。
  - `anchors` 属性用于子项的锚点对齐。
- **用法**:
  ```qml
  Column {
      spacing: 10
      padding: 5

      Rectangle {
          width: 100
          height: 100
          color: "red"
      }

      Rectangle {
          width: 100
          height: 100
          color: "blue"
      }
  }
  ```


- **特点**:
  - **简单**: `Column` 主要用于将子项垂直排列,不需要显式设置布局属性。
  - **限制**: 不支持像 `ColumnLayout` 那样的动态布局特性。所有子项的大小和位置由 `Column` 的子项定义,不会自动调整。

### 2. `ColumnLayout`

- **作用**: `ColumnLayout` 是一个更强大的布局管理器,用于将子项垂直排列,并且可以对其进行详细的控制。
- **属性**:
  - `spacing`: 设置子项之间的间距。
  - `Layout` 属性: `ColumnLayout` 使用 `Layout` 属性(如 `Layout.fillWidth` 和 `Layout.fillHeight`)来控制子项的尺寸和位置。
- **用法**:
  ```qml
  import QtQuick 2.15
  import QtQuick.Layouts 1.15

  ColumnLayout {
      spacing: 10

      Rectangle {
          Layout.fillWidth: true
          Layout.preferredHeight: 100
          color: "red"
      }

      Rectangle {
          Layout.fillWidth: true
          Layout.preferredHeight: 100
          color: "blue"
      }
  }
  ```


- **特点**:
  - **灵活**: `ColumnLayout` 支持动态调整子项的大小和位置。你可以使用 `Layout` 属性来设置子项的行为,例如填充宽度或高度。
  - **布局管理**: 自动管理子项的间距、对齐和大小,适合需要复杂布局管理的场景。
  - **属性**: 子项需要使用 `Layout` 属性来控制布局,这使得布局更具动态性。

### 总结

- **`Column`**: 更简单的垂直排列容器,不支持复杂的布局管理。适用于简单的垂直排列场景。
- **`ColumnLayout`**: 更强大的布局管理器,支持动态调整子项大小和位置。适用于需要更复杂布局管理的场景。

在选择使用 `Column` 还是 `ColumnLayout` 时,考虑你的布局需求。如果你需要更多的布局控制和灵活性,`ColumnLayout` 是更好的选择。如果你只需要简单的垂直排列,`Column` 就足够了。

按钮Button 的flat

  • flat: falseflat: true 属性用于设置按钮的外观。
    • flat: false:按钮会有默认的样式和背景。
    • flat: true:按钮是扁平化的,通常没有背景或边框。
  • Image:按钮中的图片作为按钮的内容。
  • 按钮的外观和行为:

    • 当使用 flat: true 时,按钮会被渲染成扁平化的样式,因此它可能没有背景色或边框。这通常用于需要更简单外观的按钮。
    • flat: false 的按钮将使用默认样式,这通常包括背景色和边框。
  • 按钮尺寸和布局:

    • 如果 Image 的尺寸小于按钮的尺寸,按钮的点击区域可能会大于图片显示区域。你可以设置 widthheight 来确保按钮的大小适合图片。
  • 设置 Button 的样式:

    • 如果你需要自定义按钮的外观,可以使用 Button 的样式属性或自定义 ButtonStyle