10.QML Qt Quick Controls 2之imagine style

本文介绍了如何使用QtQuickControls2的Imagine样式来改变应用程序的外观。Imagine样式基于图像资源,允许通过自定义命名的图片来定制界面。文章提供了代码示例,展示了如何使用QML创建界面,并解释了UI资源中图片命名的规则以及状态的含义。通过添加自定义资源,可以实现界面美化。文章还展示了添加资源前后的界面效果,并给出了qtquickcontrols2.conf的配置内容。

Qt Quick Controls 2的目标之一是将控件的逻辑与外观分离。外观的实现由QML代码和图形资源组成。使用Imagine样式(imagine style),可以自定义应用程序的外观和图形资源

Imagine样式基于图像资源。样式带有一组默认的图像,可以通过自定义命名指定提供包含图像的目录,从而更改界面外观。

 

示例

import QtQuick 2.14
import QtQuick.Controls 2.5

ApplicationWindow {
    id:mainwin
    visible: true
    width: 640
    height: 480
    title: qsTr("imagine style")

    Column {
        anchors.top:parent.top
        anchors.left: parent.left
        anchors.margins: 10
        width: mainwin.width/2

        spacing: 10

        Repeater {
            model: 5
            Button {
                text: qsTr("click")
                width: parent.width
                height: mainwin.height/6
            }
        }
    }

    Grid {
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.margins: 10

        spacing: 10
        columns: 2

        Repeater {
            model: 10

            Button {
                text: qsTr("check")
                height: mainwin.height/6
                checkable: true
            }
        }
    }
}

上述代码的显示效果是这样的

界面很平常,所以就需要使用imagine style美化一下,imagine style的默认效果如下

也可以添加imagine style的资源,添加资源之后,整体目录结构如下

其中,qtquickcontrols2.conf的内容如下

[Controls]
Style=Imagine

[Imagine]
Path=:images/imagine

前两行表示空间的风格,后两行表示imagine style的UI资源路径

 

UI资源中的图片命名也是有讲究的

首先看后缀,有png和9.png两种,9.png是安卓开发里面的一种特殊的图片,这种格式的图片通过ADT自带的编辑工具生成,使用九宫格切分的方法,使图片可以自适应显示。

图片的命名按照如下格式命名

<control>-<element>-<states>

<control>表示空间,<element>表示空间中的元素,这两个是必需的,<states>表示的是空间的状态,是可选的。例如,为button提供了一个名为“button background.9.png”的文件,它将用于设置button的background属性并支持button的每个状态。而"button background-pressed.9.png"表示用于设置button的background属性,但是只支持button的press状态(也就是说,只有pressed状态出现时(button被按下),才会使用该图片)

常用的状态有以下九个

disabled
pressed
checked
checkable
focused
highlighted
flat
mirrored
hovered

 

添加资源后的效果如下

 

参考

《qml book》

https://doc.qt.io/qt-5/qtquickcontrols2-imagine.html

https://baike.baidu.com/item/.9.png/5404360

 

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

 

### QMLQt Quick Controls 2 的区别及使用方法 #### 区别 QML 是一种声明式语言,用于描述用户界面,它允许开发者以声明的方式构建动态的用户界面。Qt QuickQML 的一个模块,提供了用于创建用户界面的基本组件和功能,包括可视化组件、模型视图支持、动画框架等。Qt Quick Controls 2 则是基于 Qt Quick 的一组高级控件库,旨在提供更加丰富和一致的用户界面体验。 Qt Quick Controls 2Qt Quick Controls 1 的主要区别在于性能优化和 API 设计上的改进。Qt Quick Controls 2 的控件样式更加现代化,所有控件的 `delegate` 都可以通过控件自身访问,而不是通过分离的样式对象。这种设计减少了不必要的委托使用,提高了运行效率,特别是在嵌入式硬件上的表现更好。此外,Qt Quick Controls 2 不再依赖于 Qt Widgets,避免了对本地样式的依赖,使得控件在不同平台上的表现更加一致。 #### 使用方法 要使用 Qt Quick Controls 2,首先需要确保项目中包含了相应的模块。可以在 `.pro` 文件中添加以下行来引入 Qt Quick Controls 2: ```qmake QT += quickcontrols2 ``` 在 QML 文件中,可以通过导入 `QtQuick.Controls` 模块来使用控件。例如,创建一个简单的按钮和文本框: ```qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 Window { visible: true width: 300 height: 200 title: "Qt Quick Controls 2 Example" Button { text: "Click Me" onClicked: { label.text = "Button clicked!" } } Label { id: label text: "Hello, Qt Quick Controls 2" anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter anchors.topMargin: 20 } } ``` 在这个例子中,`Button` 和 `Label` 是 Qt Quick Controls 2 提供的标准控件。通过 `onClicked` 信号处理器,可以定义按钮点击时的行为。 对于更复杂的 UI 设计,可以利用 Qt Quick Controls 2 提供的各种布局和容器控件,如 `Column`, `Row`, `StackLayout` 等,来组织和排列子控件。这些布局控件可以帮助开发者更方便地管理界面元素的位置和大小。 #### 样式定制 Qt Quick Controls 2 允许开发者通过样式属性来定制控件的外观。每个控件都有一个 `style` 属性,可以用来设置控件的背景颜色、字体、边框等。例如,修改按钮的背景颜色和字体大小: ```qml Button { text: "Styled Button" style: ButtonStyle { background: Rectangle { color: "lightblue" border.color: "black" border.width: 2 } font.pixelSize: 20 } } ``` 在这个例子中,`ButtonStyle` 用于定义按钮的样式,包括背景颜色、边框颜色和宽度,以及字体大小。 #### 相关问题 1. 如何在 QML 中实现一个虚拟二维摇杆控件? 2. Qt 中有哪些第三方库支持虚拟摇杆控件? 3. 如何将二维摇杆控件的坐标映射为极坐标(角度和距离)?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值