想象风格

Imagine 风格基于可配置的图像资产。更多

导入声明:导入 QtQuick.Controls.Imagine 2.12
Qt 5.10

附加属性

详细描述

Imagine 风格基于图像资产。该样式自带一组默认图片,但只要提供一个使用预定义命名规则的图片目录,就可以轻松更改图片。

带有默认图片的 Imagine 风格

要使用 Imagine 风格运行应用程序,请参阅 Qt Quick Controls 中的 "使用风格"。

文件名

图像文件使用以下约定命名:

<control>-<element>-<states>

<control><element> 部分是必须的,但<states> 部分是可选的。例如,如果为Button 提供了名为"button-background.9.png" 的单一文件,那么Button 支持的每个状态都将使用该文件。开发者可自行决定为哪一组状态提供图片。不过,建议尽可能为最常见的控件状态提供图片,如disabled,pressed 等。这将确保交互式控件的视觉表现符合最终用户的预期。

元素参考

下表列出了每个控件支持的元素,以及该元素可能的状态和它所期望的文件扩展名。元素是代表控件特定视觉部分的图像。例如,Button"background" 元素表示其background

控件元素状态扩展
ApplicationWindow背景活动.9.png (或 .png)
BusyIndicator动画禁用、运行、镜像、悬停.webp
背景同上.webp
Button背景禁用、按下、选中、可选中、聚焦、高亮、平面、镜像、悬停.9.png
CheckBox背景禁用、按下、选中、部分选中、集中、镜像、悬停.9.png (或 .png)
指示器同上.png
CheckDelegate背景禁用、按下、选中、部分选中、聚焦、高亮、镜像、悬停.9.png (或 .png)
指示器同上.png
ComboBox背景禁用、按下、可编辑、打开、聚焦、镜像、悬停、平面.9.png (或 .png)
指示器同上.png
弹出窗口同上.9.png (或 .png)
DelayButton背景禁用、按下、选中、可选中、聚焦、镜像、悬停.9.png (或 .png)
进度同上.9.png (或 .png)
遮罩同上.9.png (或 .png)
Dial背景1禁用、按下、聚焦、镜像、悬停.9.png (或 .png)
句柄同上.9.png (或 .png)
Dialog背景模态,暗.9.png (或 .png)
标题同上.9.png (或 .png)
覆盖模式.9.png (或 .png)
DialogButtonBox背景禁用,镜像.9.png (或 .png)
Drawer背景模态、暗淡、顶部、左侧、右侧、底部.9.png (或 .png)
叠加模式.9.png (或 .png)
Frame背景禁用,镜像.9.png (或 .png)
GroupBox背景禁用,镜像.9.png (或 .png)
标题同上.9.png (或 .png)
ItemDelegate背景禁用、按下、聚焦、高亮、镜像、悬停.9.png (或 .png)
Label背景禁用、镜像、悬停.9.png (或 .png)
Menu背景模态、暗淡.9.png (或 .png)
叠加模式.9.png (或 .png)
MenuItem箭头禁用、按下、选中、聚焦、高亮、镜像、悬停.png
背景同上.9.png (或 .png)
指示器同上.png
MenuSeparator背景禁用,镜像.9.png (或 .png)
分隔符同上.9.png (或 .png)
Page背景禁用,镜像.9.png (或 .png)
PageIndicator背景禁用、镜像、悬停.9.png (或 .png)
委托禁用、按下、当前、镜像、悬停.png
Pane背景禁用、镜像.9.png (或 .png)
Popup背景模态、暗淡.9.png (或 .png)
叠加模式.9.png (或 .png)
ProgressBar动画禁用、镜像、悬停.png
背景禁用、不确定、镜像、悬停.9.png (或 .png)
遮罩同上.9.png (或 .png)
进度同上.9.png (或 .png)
RadioButton背景禁用、按下、选中、聚焦、镜像、悬停.9.png (或 .png)
指示器同上.png
RadioDelegate背景禁用、按下、选中、聚焦、高亮、镜像、悬停.9.png (或 .png)
指示器同上.png
RangeSlider背景垂直、水平、禁用、聚焦、镜像、悬停.9.png (或 .png)
RangeSlider进度同上.9.png (或 .png)
处理第一、第二、垂直、水平、禁用、按下、聚焦、镜像、悬停.png
RoundButton背景禁用、按下、选中、可选中、聚焦、高亮、平面、镜像、悬停.9.png (或 .png)
ScrollBar背景垂直、水平、禁用、交互式、按下、镜像、悬停.9.png (或 .png)
句柄同上.9.png (或 .png)
ScrollIndicator背景垂直、水平、禁用、镜像、悬停.9.png (或 .png)
句柄同上.9.png (或 .png)
ScrollView背景禁用,镜像.9.png (或 .png)
Slider背景垂直、水平、禁用、按下、聚焦、镜像、悬停.9.png (或 .png)
句柄同上.9.png (或 .png)
进度同上.9.png (或 .png)
SpinBox背景禁用、可编辑、聚焦、镜像、悬停.9.png (或 .png)
编辑器禁用、聚焦、镜像、悬停.9.png (或 .png)
指示器上、下、禁用、可编辑、按下、聚焦、镜像、悬停.9.png (或 .png)
StackView背景禁用、镜像.9.png (或 .png)
SwipeDelegate背景禁用、按下、聚焦、高亮、镜像、悬停.9.png (或 .png)
SwipeView背景垂直、水平、禁用、交互式、聚焦、镜像.9.png (或 .png)
Switch背景禁用、按下、选中、聚焦、镜像、悬停.9.png (或 .png)
句柄同上.9.png (或 .png)
指示器同上.9.png (或 .png)
SwitchDelegate背景禁用、按下、选中、聚焦、高亮、镜像、悬停.9.png (或 .png)
句柄同上.9.png (或 .png)
指示器同上.9.png (或 .png)
TabBar背景禁用、页眉、页脚、镜像.9.png (或 .png)
TabButton背景禁用、按下、选中、聚焦、镜像、悬停.9.png (或 .png)
TextArea背景禁用、聚焦、镜像、悬停.9.png (或 .png)
TextField背景禁用、聚焦、镜像、悬停.9.png (或 .png)
ToolBar背景禁用、页眉、页脚、镜像.9.png (或 .png)
ToolButton背景禁用、按下、选中、可选中、聚焦、高亮、平面、镜像、悬停.9.png (或 .png)
ToolSeparator背景垂直、水平、禁用、镜像.9.png (或 .png)
分隔符同上.9.png (或 .png)
ToolTip背景.9.png (或 .png)
Tumbler背景禁用、聚焦、镜像、悬停.9.png (或 .png)

注: 1)Imagine 风格 Dial 尚不支持 Qt 6.6 中引入的startAngleendAngle 属性,而是使用固定的背景图片。

资产示例

下表列出了所有控件的资产示例(取自默认 Imagine 风格资产)。该列表并非详尽无遗,因为并非所有元素都需要资产,但在创建您自己的资产时,该列表可用作指南。

这些资产导出的模板可作为Sketch 项目使用。

控制元素状态资产备注
ApplicationWindow背景

见脚注 1
覆盖

见脚注 1
覆盖模态

见脚注 1
Button背景

背景残疾

背景聚焦

背景已按下

背景已选中

背景已检查、禁用

背景已选中、集中

背景选中、悬停

背景高亮显示

背景高亮显示、禁用

背景突出显示、聚焦

背景高亮、悬停

背景高亮显示,按下

背景高亮显示,选中

背景悬停

背景平面

背景平面、残疾

背景扁平、悬停

背景扁平、按下

背景平,有格子

CheckBox指示器

指示器禁用

指示灯已按下

指示灯已检查

指示灯已检查,已按下

指示器选中,悬停

指示器选中,聚焦

指示灯部分,已检查

指示灯部分,已检查,已按下

指示灯部分、检查、集中

指示灯部分、选中、悬停

指示器集中

指标悬停

CheckDelegate背景

背景禁用

背景已按下

背景聚焦

背景悬停

指示器

指示器禁用

指示灯已按下

指示灯已检查

指示灯已检查,已按下

指示灯选中,聚焦

指示器选中,悬停

指示器聚焦

指标悬停

指示器部分,选中

指示灯部分、检查、按下

指示灯部分、检查、集中

指示灯部分、选中、悬停

指示器悬停

ComboBox背景

背景禁用

背景聚焦

背景悬停

背景按下

背景打开

背景可编辑

背景可编辑、聚焦

背景可编辑、禁用

指示器

指示器禁用

指示器可编辑

指示器可编辑、禁用

指示器可编辑、镜像

指示器可编辑、镜像、禁用

弹出窗口

DelayButton背景

背景禁用

背景禁用,选中

背景集中

背景按下

背景检查

背景选中,集中

背景选中、悬停

背景悬停

进度

进度禁用

遮罩

Dial背景

背景禁用

背景聚焦

处理

句柄禁用

手柄集中

手柄集中,按下

手柄聚焦、悬停

句柄按下

句柄悬停

Dialog背景

覆盖

见脚注 1
覆盖模态

见脚注 1
DialogButtonBox背景

Drawer背景左侧

背景

背景顶部

背景底部

覆盖

见脚注 1
覆盖模态

见脚注 1
Frame背景

GroupBox背景

标题

ItemDelegate背景

背景禁用

背景已按下

背景集中

背景悬停

背景高亮

Menu背景

MenuItem背景

背景高亮显示

箭头

箭头镜像

箭头禁用

箭头镜像、禁用

指示器

指示器禁用

指示器按下

指示灯已检查

指示灯已检查,已按下

指示灯选中,聚焦

指示器选中,悬停

指示器聚焦

指标悬浮

MenuSeparator分隔符

Page背景

参见脚注 1
PageIndicator委托

委托禁用

代表禁用,当前

委托已按下

委托当前

Pane背景

Popup背景

参见脚注 1
覆盖

见脚注 1
覆盖模态

ProgressBar背景

进度

掩码

RadioButton指示器

指示器禁用

指示器按下

指示灯已检查

指示灯已选中,已聚焦

指示器选中,悬停

指示器选中,按下

指示器聚焦

指示器悬停

RadioDelegate背景

背景禁用

背景按下

背景集中

背景悬停

指示器

指示器禁用

指示器按下

指示灯已检查

指示灯已选中,已聚焦

指示器选中,悬停

指示器选中,按下

指示器聚焦

指示器悬停

RangeSlider背景垂直

背景水平

进度垂直

进度垂直,禁用

进度水平

进度水平、禁用

处理

句柄禁用

手柄集中

手柄聚焦、悬停

句柄聚焦、按下

句柄悬停

句柄按下

RoundButton背景

背景禁用

背景禁用,选中

背景集中

背景按下

背景检查

背景选中,集中

背景选中、悬停

背景高亮

背景高亮显示、按下

背景突出显示、集中

背景高亮显示、悬停

背景悬停

ScrollBar处理

句柄禁用

句柄交互式

处理互动、禁用

处理互动、按下

处理交互式、悬停

ScrollIndicator句柄

Slider背景垂直

背景水平

进度垂直

进度垂直,禁用

进度水平

进度水平、禁用

处理

句柄禁用

手柄集中

手柄聚焦、悬停

句柄聚焦、按下

句柄悬停

句柄按下

SpinBox背景

背景禁用

背景集中

背景可编辑

指示器向上

指示器向上,禁用

指示器向上,按下

指示灯向上,聚焦

指示灯向上,镜像

指示器向上,悬停

指示器向上,可编辑

指示器向上、可编辑、按下

指示器向上、可编辑、集中

指示器向上、可编辑、镜像

指示器向上、可编辑、悬停

指示器向下

指示器向下、禁用

指示器向下,已按下

指示灯向下向下,聚焦

指示灯向下,镜像

指示灯向下,悬停

向下向下,可编辑

向下向下,可编辑,按下

向下向下,可编辑,集中

向下向下、可编辑、镜像

向下向下、可编辑、悬停

SwipeDelegate背景

背景禁用

背景已按下

背景聚焦

背景悬停

Switch指示器

指示器禁用

指示灯已按下

指示灯已检查

指示灯已检查,已聚焦

指示器选中,悬停

指示器选中,按下

指示器集中

指示器悬停

处理

句柄禁用

把手已按下

SwitchDelegate背景

背景禁用

背景已按下

背景聚焦

背景悬停

指示器

指示器禁用

指示灯已按下

指示灯已检查

指示灯已检查,已聚焦

指示器选中,悬停

指示器选中,按下

指示器集中

指示器悬停

处理

句柄禁用

TabBar背景

TabButton背景

背景禁用

背景已按下

背景已选中

背景悬停

背景禁用、选中

TextArea背景

背景禁用

背景聚焦

TextField背景

背景禁用

背景聚焦

ToolBar背景

ToolButton背景

背景禁用,选中

背景集中

背景已按下

背景已选中

背景已检查、有重点

背景选中、悬停

背景悬停

ToolSeparator分隔符水平

分隔符立式

ToolTip背景

1包含一种颜色的 1x1 图像,拉伸后填充控件。

9 补丁图像

Imagine 风格使用9 补丁图像,以便让设计人员控制特定元素在调整大小后的反应。下面是一个 9 补丁图像的示例,表示Button'sbackground ,以及一个放大版本(以便更容易看到 9 补丁线):

图片内容宽 44 像素,高 32 像素。每幅 9 补丁图像的每边都需要一条 1 像素粗的线(统称为 "9 补丁线"),因此图像的实际大小为宽 46 像素、高 34 像素。请注意,无论图像的目标 DPI 是多少,9 补丁线的厚度都必须是一个像素。例如,button-background.9.png 和 button-background@2x.9.png 的 9 补丁线都必须是一个像素粗。

9 条补丁线必须为黑色,其余区域必须为透明或白色:

可拉伸区域

顶部和左侧边缘的 9 条补丁线决定了调整图像大小时哪些部分会被拉伸。

以下是 9 补丁线图像在不同尺寸下被调整为原始尺寸的 1.5 倍的示例:

请注意圆角是如何保持其原始大小的,因为它们在线条范围之外。

填充区域

右边和底边的 9 条填充线决定了控件contentItem 的可用空间大小,这意味着它也可以被视为控制padding 。有关填充的示意图,请参阅Control Layout

下面是更多调整 9 补丁图像大小的示例,但这次演示的是填充 9 补丁线是如何工作的。

contentItem 可以根据需要在阴影区域内占用尽可能多的空间。如果不使用填充线,contentItem 将在不超出可拉伸区域的情况下占用所需的空间。

嵌入区域

例如,在某些情况下,控件需要有阴影。但是,如果我们为上面的按钮添加阴影,就会影响其大小,从而给布局和鼠标/触摸输入边界带来问题。

内嵌区域可以解决这个问题,它告诉控件,9 补丁图像的某个区域应位于控件之外:

在下图中,虚线代表按钮的可点击区域,以及按钮在布局中所占的空间。阴影由其后面的条纹区域标记:

导出 9 补丁图像

可以使用各种矢量和位图编辑器来创建适合 Imagine 风格使用的 9 补丁图像。下文将简要介绍每种编辑器的导出过程,最后一节将说明如何确保导出的图像符合 9 补丁格式。

Affinity Designer

请参阅 Affinity 的导出设置文档。

Adobe Illustrator

请参阅 Adobe 的资产导出面板文档。

Adobe Photoshop

请参见 Adobe 的 "从图层生成图像资产 "文档。

Inkscape

Inkscape 9-Patch 导出扩展可用于使用 Inkscape 导出资产。

草图

请参阅 Sketch 的导出文档。

Qt Quick Controls 还提供了一个 Sketch插件,可在导出资产后自动修正 9-patch 线条的粗细。要安装该文件,请双击该文件。一旦 Sketch 确认已安装 9-patch 导出插件,该插件将在导出图像时自动处理图像。

修复 9 补丁线

以多种 DPI 变体(@2x@3x 等)导出 9 补丁图像时,9 补丁线通常会随图像一起放大。有几种方法可以解决这个问题,但最简单的方法可能是使用ImageMagick 的 mogrify工具。该工具有一个-shave 功能,可用于裁剪图像以减小 9 补丁线的厚度:

mogrify -shave 1x1 -path path/to/images *@2x.9.png
mogrify -shave 2x2 -path path/to/images *@3x.9.png
mogrify -shave 3x3 -path path/to/images *@4x.9.png

普通 DPI 图像(没有@Nx 前缀的图像)不会受到影响,因此只需在用于高 DPI 显示器的图像上运行该命令即可。

动画图片

Imagine 风格支持WebP和 GIF 动画图像格式。

自定义

路径

Imagine 样式允许自定义用于选择图像资产的路径。路径可为任何窗口或项目指定,并以与fonts 相同的方式自动传播到子窗口。在下面的示例中,窗口和所有三个单选按钮都使用深色图像资产(文件位于 "qrc:/themes/dark")。

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.Imagine 2.12

ApplicationWindow {
    visible: true

    Imagine.path: "qrc:/themes/dark"

    Column {
        anchors.centerIn: parent

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

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

配置文件
变量描述
Path指定包含 Imagine 样式资产的目录路径。如果未指定,则使用内置资产。

例如,指定存储在资源系统中的目录路径:

[Imagine]
Path=:/imagine-assets

指定本地目录的相对路径:

[Imagine]
Path=imagine-assets

注意: 由于技术限制,如果路径是qtquickcontrols2.conf 文件的相对路径,则不应命名为"imagine"

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

环境变量
变量说明
QT_QUICK_CONTROLS_IMAGINE_PATH指定包含 Imagine 样式资产的目录路径。如果未指定,则使用内置资产。

例如,指定存储在资源系统中的目录路径:

QT_QUICK_CONTROLS_IMAGINE_PATH=:/imagine-assets

指定本地目录的相对路径:

QT_QUICK_CONTROLS_IMAGINE_PATH=imagine-assets

注意: 由于技术限制,如果路径是qtquickcontrols2.conf 文件的相对路径,则不应命名为"imagine"

QT_QUICK_CONTROLS_IMAGINE_SMOOTH设置为1 可启用 9 补丁图像的平滑缩放。此环境变量在 Qt 6.5 中添加。

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

调色板

Imagine 风格支持通过palette 属性和qtquickcontrols2.conf文件自定义调色板。与其他样式一样,Imagine 样式使用的palette roles 具体内容取决于样式。不过,由于控件的大部分视觉外观(例如:背景)都是通过图像资产管理的,因此只有通常用于文本的角色才会产生影响。

字体

可通过font 属性和配置文件设置自定义字体。

依赖关系

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

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

另请参阅 样式 Qt Quick Controls

附加属性文档

Imagine.path:string

此附加属性保存图像资产的路径...

Button {
    Imagine.path: "qrc:/themes/dark"
}

© 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.