材料风格

材质风格基于《谷歌材质设计指南》。更多

导入声明:导入 QtQuick.Controls.Material 2.12
Qt 5.7

附加属性

附加方法

  • colorcolor(枚举预定义,枚举阴影)

详细说明

Material 风格基于Google Material 设计指南。它可以实现跨平台和跨设备尺寸的统一体验。

Material 风格的浅色主题。

材质风格的深色主题。

要使用 Material 样式运行应用程序,请参见Qt Quick Controls 中使用样式

注意: Material 风格不是原生的 Android 风格。Material 样式是 100% 跨平台的Qt Quick Controls 样式实现,遵循 Google Material 设计指南。该样式可在任何平台上运行,在任何地方看起来都大致相同。由于可用系统字体和字体渲染引擎的不同,可能会出现细微差别。

注: 随着 Material Design Guidelines 的不断变化,该样式可能会改变某些填充或字体值,例如,以保持与指南的一致性。

自定义

材质 "样式支持多个可自定义的属性。其中一些属性propagate 到子代的方式与fonts 相同:

其余属性不会传播给子代:

在下面的示例中,窗口和所有三个单选按钮都显示为深色主题,并使用了紫色强调色:

import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material

ApplicationWindow {
    visible: true

    Material.theme: Material.Dark
    Material.accent: Material.Purple

    Column {
        anchors.centerIn: parent

        RadioButton {
            text: qsTr("Small")
        }
        RadioButton {
            text: qsTr("Medium")
            checked: true
        }
        RadioButton {
            text: qsTr("Large")
        }
    }
}

除了在 QML 中指定属性外,还可以通过环境变量或在配置文件中指定其中一些属性。在 QML 中指定的属性优先于所有其他方法。

配置文件

变量说明
Theme指定默认材料主题。该值可以是可用主题之一,例如"Dark"
Variant指定 Material 变体。Material Design 有两个变体:一个是为触摸设备设计的普通变体,另一个是为桌面设计的密集变体。密集变体使用较小尺寸的控件及其字体。

该值可以是"Normal""Dense"

Accent指定默认材质强调色。该值可以是color ,但建议使用预定义的材质颜色,例如"Teal"
Primary指定默认材质主色调。该值可以是任何color ,但建议使用其中一种预定义材质颜色,例如"BlueGrey"
Foreground指定默认材质前景色。该值可以是任何color ,也可以是预定义材质颜色之一,例如"Brown"
Background指定默认材质背景色。该值可以是任何color ,也可以是预定义的材质颜色之一,例如"Grey"

有关配置文件的更多详情,请参阅Qt Quick Controls 配置文件

环境变量

变量说明
QT_QUICK_CONTROLS_MATERIAL_THEME指定默认Material 主题。该值可以是可用主题之一,例如"Dark"
QT_QUICK_CONTROLS_MATERIAL_VARIANT指定 Material 变体。Material Design 有两个变体:一个是为触摸设备设计的普通变体,另一个是为桌面设计的密集变体。密集变体使用较小尺寸的控件及其字体。

该值可以是"Normal""Dense"

QT_QUICK_CONTROLS_MATERIAL_ACCENT指定默认材质强调色。该值可以是color ,但建议使用预定义的材质颜色,例如"Teal"
QT_QUICK_CONTROLS_MATERIAL_PRIMARY指定默认材质主色调。该值可以是任何color ,但建议使用其中一种预定义材质颜色,例如"BlueGrey"
QT_QUICK_CONTROLS_MATERIAL_FOREGROUND指定默认材质前景色。该值可以是任何color ,也可以是预定义材质颜色之一,例如"Brown"
QT_QUICK_CONTROLS_MATERIAL_BACKGROUND指定默认材质背景色。该值可以是任何color ,也可以是预定义的材质颜色之一,例如"Grey"

有关支持的环境变量的完整列表,请参阅 Qt Quick Controls 中的"支持的环境变量"。

依赖关系

必须单独导入 "材质 "样式,才能访问 "材质 "样式特有的属性。需要注意的是,无论是否引用了材质样式,相同的应用程序代码都可以在任何其他样式下运行。只有在使用材质样式运行应用程序时,特定于材质的属性才会生效。

如果在始终加载的 QML 文件中导入了 Material 样式,则必须将 Material 样式与应用程序一起部署,这样才能运行应用程序,而不管应用程序以哪种样式运行。通过使用文件选择器,可以应用特定于样式的调整,而不会对样式产生硬性依赖。

预先定义的材质颜色

尽管主色调和重点色调可以是任何color ,但建议使用其中一种预定义颜色,这些颜色可与 Material 风格调色板的其余部分完美搭配:

可用的预定义颜色:

常量说明
Material.Red
#F44336
Material.Pink
#E91E63(默认重音)
Material.Purple
#9C27B0
Material.DeepPurple
#673AB7
Material.Indigo
#3F51B5(默认主音)
Material.Blue
#2196F3
Material.LightBlue
#03A9F4
Material.Cyan
#00BCD4
Material.Teal
#009688
Material.Green
#4CAF50
Material.LightGreen
#8BC34A
Material.Lime
#CDDC39
Material.Yellow
#FFEB3B
Material.Amber
#FFC107
Material.Orange
#FF9800
Material.DeepOrange
#FF5722
Material.Brown
#795548
Material.Grey
#9E9E9E
Material.BlueGrey
#607D8B

使用深色主题时,默认情况下会使用不同色调的预定义颜色:

常量说明
Material.Red
#EF9A9A
Material.Pink
#F48FB1(默认重点色)
Material.Purple
#CE93D8
Material.DeepPurple
#B39DDB
Material.Indigo
#9FA8DA(默认主音)
Material.Blue
#90CAF9
Material.LightBlue
#81D4FA
Material.Cyan
#80DEEA
Material.Teal
#80CBC4
Material.Green
#A5D6A7
Material.LightGreen
#C5E1A5
Material.Lime
#E6EE9C
Material.Yellow
#FFF59D
Material.Amber
#FFE082
Material.Orange
#FFCC80
Material.DeepOrange
#FFAB91
Material.Brown
#FFCC80 #FFAB91
Material.Grey
#EEEEEEEE
Material.BlueGrey
#B0BEC5

预设色调

每种预定义颜色都有几种不同的色调,可以传递给Material.color()函数:

常量
Material.Shade50
Material.Shade100
Material.Shade200
Material.Shade300
Material.Shade400
Material.Shade500
Material.Shade600
Material.Shade700
Material.Shade800
Material.Shade900
Material.ShadeA100
Material.ShadeA200
Material.ShadeA400
Material.ShadeA700

另请参阅 基本样式通用样式

变体

材质样式还支持密集变体,在这种变体中,按钮和委托等控件的高度较小,使用的字体也较小。建议在桌面平台上使用密集变体,因为在桌面平台上使用鼠标和键盘可以实现更精确、更灵活的用户交互。

要使用密集变体,可将QT_QUICK_CONTROLS_MATERIAL_VARIANT 环境变量设为Dense ,或在qtquickcontrols2.conf文件中指定Variant=Dense 。这两种情况下的默认值都是Normal

下面的图片说明了一些控件在使用普通和密集变体时的不同之处:

请注意,上面显示的高度可能会因不同平台的字体差异而有所不同。

控件特定说明

文本区域

TextArea 支持两种容器样式: 和 。Outlined TextArea 具有浮动占位符文本,位于控件顶部。这就要求占位符文本超出控件的边界,当 或其子控件 Flickable 将 设置为 时,占位符文本就会被剪切。为避免这种情况,在这些情况下, 设置为适当的值。Filled Outlined TextArea clip true topInset

根据材料指南,占位符文本应保持简短,不要占据多行。

文本字段

上面解释的TextArea剪辑问题也可能发生在TextField 上。为避免这种情况,当TextField 将 clip 设置为true 时,topInset 将被设置为一个适当的值。

根据材料指南,占位符文本应保持简短,不应占用多行。

附加属性文档

Material.accent:颜色

此附加属性用于保存主题的强调色。该属性可附加到任何窗口或项目。该值会传播给子代。

默认值为Material.Pink

在下面的示例中,高亮按钮的强调色更改为Material.Orange

Button {
    text: qsTr("Button")
    highlighted: true
    Material.accent: Material.Orange
}

注意: 尽管强调色可以是任何color ,但建议使用预定义的材质颜色,这些颜色可与材质样式调色板的其余部分配合使用。


Material.background:颜色

该附加属性用于保存主题的背景颜色。该属性可附加到任何窗口或项目。该值会传播给子代。

默认值为特定主题(浅色或深色)。

在下面的示例中,按钮的背景颜色更改为Material.Teal

Button {
    text: qsTr("Button")
    highlighted: true
    Material.background: Material.Teal
}


Material.elevation:int

此附加属性表示控件的高度。高度越高,阴影越深。该属性可附加到任何控件,但并非所有控件都能将海拔高度可视化。该值不会传播给子控件。

默认值与控件相关。

在下面的示例中,窗格的标高被设置为6 ,以实现抬高卡片的外观:

Pane {
    width: 120
    height: 120

    Material.elevation: 6

    Label {
        text: qsTr("I'm a card!")
        anchors.centerIn: parent
    }
}


Material.foreground:color

该附加属性用于保存主题的前景色。该属性可附加到任何窗口或项目。该值会传播给子代。

默认值为特定主题的颜色(浅色或深色)。

在下面的示例中,按钮的前景色设置为Material.Pink

Button {
    text: qsTr("Button")
    Material.foreground: Material.Pink
}


Material.primary:颜色

该附加属性用于保存主题的主色调。该属性可附加到任何窗口或项目。该值会传播给子代。

主色默认用作ToolBar 的背景色。

默认值为Material.Indigo

注: 尽管主色调可以是任何color ,但建议使用预定义的材质颜色,这些颜色可与材质样式调色板的其他颜色完美搭配。


Material.theme:枚举

该附加属性用于确定主题是浅色还是深色。该属性可附加到任何窗口或项目。该值会传播给子代。

可用主题

常量描述
Material.Light浅色主题(默认)
Material.Dark深色主题
Material.System系统主题

将主题设置为System 时,会根据系统主题颜色选择浅色或深色主题。不过,在读取 theme 属性的值时,该值绝不是System ,而是实际主题。

在下面的示例中,窗格和按钮的主题都设置为Material.Dark

Pane {
    Material.theme: Material.Dark

    Button {
        text: qsTr("Button")
    }
}


Material.roundedScale:枚举

此附加属性用于保存目标控件上使用的圆角半径。该属性可附加到任何窗口或项目,但只有某些控件支持。该值不会传播给子控件。

默认值与控件有关。

可用刻度

常数说明
Material.NotRounded方角
Material.ExtraSmallScale超小圆角
Material.SmallScale小圆角
Material.MediumScale中圆角
Material.LargeScale大圆角
Material.ExtraLargeScale超大圆角
Material.FullScale完全圆角

此属性在 Qt 6.5 中添加。

另请参阅:材质风格:形状


Material.containerStyle:枚举

该附加属性用于保存目标控件使用的容器样式。该属性可附加到任何窗口或项目,但默认情况下只有TextFieldTextArea 支持。该值不会传播给子控件。

默认值是特定于控件的。

可用样式:

常量说明
Material.Filled如果有填充式容器变体,请使用填充式容器变体
Material.Outlined如果有,使用勾勒的容器变体

此属性在 Qt 6.5 中添加。

另请参阅:材质样式:文本字段容器


附加方法文档

color color(枚举 预定义枚举 阴影)

此附加方法返回指定的预定义材料颜色与给定阴影的有效颜色值。如果省略,阴影参数默认为Material.Shade500

Rectangle {
    color: Material.color(Material.Red)
}

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.