编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

  • Linux应用开发

    • README
    • QML基础入门

      • README
      • Qml基础概念
      • Qml基础语法
      • Qml基础组件
      • Qml控件介绍
        • 4.1 按钮类控件
          • 4.1.1 AbstractButton
          • 4.1.2 Button
          • 4.1.3 CheckBox
          • 4.1.4 RadioButton
          • 4.1.5 ButtonGroup
          • 4.1.6 RoundButton
          • 4.1.7 Switch
          • 4.1.8 DelayButton
        • 4.2 指示类控件
          • 4.2.1 Label
          • 4.2.2 ProgressBard
          • 4.2.3 BusyIndicator
          • 4.2.4 PageIndicator
        • 4.3 输入类控件
          • 4.3.1 TextField
          • 4.3.2 TextArea
          • 4.3.3 ComboBox
          • 4.3.4 SpinBox
          • 4.3.5 Dial
          • 4.3.6 Slider
          • 4.3.7 RangeSlider
          • 4.3.8 Tumbler
          • 4.3.9 输入法使用
        • 4.4 菜单类控件
          • 4.4.1 Menu
          • 4.4.2 MenuBar
        • 4.5 容器类控件
          • 4.5.1 Pane
          • 4.5.2 Frame
          • 4.5.3 GroupBox
          • 4.5.4 ScrollView
          • 4.5.5 Page
          • 4.5.6 ScrollBar
          • 4.5.7 StackView
          • 4.5.8 TabBar
          • 4.5.9 ToolBar
          • 4.5.10 SwipeView
          • 4.5.11 ColumnLayout
          • 4.5.12 RowLayout
        • 4.6 弹出类控件
          • 4.6.1 Popup
          • 4.6.2 Dialog
          • 4.6.3 ToolTip
          • 4.6.4 Drawer
          • 4.6.5 Overlay
        • 4.7 标准对话框
          • 4.7.1 ColorDialog
          • 4.7.2 FileDialog
          • 4.7.3 FontDialog
          • 4.7.4 MessageDialog
        • 4.8 自定义组件
          • 4.8.1 组件的定义
          • 4.8.2 组件的使用
          • 4.8.3 自定义操作
          • 4.8.4 组件的优势
      • Qml高级功能
      • Canvas绘制
      • QML和C++
      • 多媒体应用
      • 模型和视图
      • 应用层开发
      • 图形和动画
    • QT核心库实践

    • Linux实践开发

  • Apps
  • Linux应用开发
  • QML基础入门
杨充
2025-08-26
目录

Qml控件介绍

# 04.Quick控件

# 目录介绍

  • 4.1 按钮类控件
    • 4.1.1 AbstractButton
    • 4.1.2 Button
    • 4.1.3 CheckBox
    • 4.1.4 RadioButton
    • 4.1.5 ButtonGroup
    • 4.1.6 RoundButton
    • 4.1.7 Switch
    • 4.1.8 DelayButton
  • 4.2 指示类控件
    • 4.2.1 Label
    • 4.2.2 ProgressBar
    • 4.2.3 BusyIndicator
    • 4.2.4 PageIndicator
  • 4.3 输入类控件
    • 4.3.1 TextField
    • 4.3.2 TextArea
    • 4.3.3 ComboBox
    • 4.3.4 SpinBox
    • 4.3.5 Dial
    • 4.3.6 Slider
    • 4.3.7 RangeSlider
    • 4.3.8 Tumbler
    • 4.3.9 输入法使用
  • 4.4 菜单类控件
    • 4.4.1 Menu
    • 4.4.2 MenuBar
  • 4.5 容器类控件
    • 4.5.1 Pane
    • 4.5.2 Frame
    • 4.5.3 GroupBox
    • 4.5.4 ScrollView
    • 4.5.5 Page
    • 4.5.6 ScrollBar
    • 4.5.7 StackView
    • 4.5.8 TabBar
    • 4.5.9 ToolBar
    • 4.5.10 SwipeView
    • 4.5.11 ColumnLayout
    • 4.5.12 RowLayout
  • 4.6 弹出类控件
    • 4.6.1 Popup
    • 4.6.2 Dialog
    • 4.6.3 ToolTip
    • 4.6.4 Drawer
    • 4.6.5 Overlay
  • 4.7 标准对话框
    • 4.7.1 ColorDialog
    • 4.7.2 FileDialog
    • 4.7.3 FontDialog
    • 4.7.4 MessageDialog
  • 4.8 自定义组件
    • 4.8.1 组件的定义
    • 4.8.2 组件的使用
    • 4.8.3 自定义操作
    • 4.8.4 组件的优势

# 4.1 按钮类控件

# 4.1.1 AbstractButton

在 QML 中,AbstractButton 是一个抽象基类,用于表示按钮控件的基本行为和属性。它定义了按钮控件的通用特性,如悬停效果、按下效果、选中状态等。

AbstractButton 通常作为其他具体按钮控件(如 Button、CheckBox、RadioButton 等)的基类使用。

AbstractButton {
    id: myButton
    text: "Click Me"
    width: 100
    height: 50

    onClicked: {
        console.log("Button clicked")
    }

    onPressedChanged: {
        if (myButton.pressed) {
            console.log("Button pressed")
        } else {
            console.log("Button released")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

需要注意的是,AbstractButton 是一个抽象基类,不能直接实例化,但可以作为其他按钮控件的基类使用。具体的按钮控件(如 Button、CheckBox、RadioButton)会继承 AbstractButton,并添加特定的功能和样式。

# 4.1.2 Button

在 QML 中使用按钮(Button)是一种常见的交互方式,让用户与应用程序进行互动。

Button {
    text: "Click Me"
    anchors.centerIn: parent

    onClicked: {
        console.log("Button clicked!")
        // 在这里可以添加按钮点击后的操作
    }
}
1
2
3
4
5
6
7
8
9

# 4.1.3 CheckBox

在 QML 中,CheckBox(复选框)是一种常用的用户界面元素,用于允许用户选择或取消选择一个选项。

CheckBox {
    text: "Check me"
    checked: false
    anchors.centerIn: parent

    onCheckedChanged: {
        if (checked) {
            console.log("Checkbox is checked")
        } else {
            console.log("Checkbox is unchecked")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 4.1.4 RadioButton

在 QML 中,RadioButton 是一种常用的单选按钮控件,用于在一组选项中选择一个选项。RadioButton 继承自 AbstractButton,因此具有按钮的基本行为和属性。

RadioButton {
    text: "Option 1"
    checked: true // 默认选中
    onCheckedChanged: {
        if (checked) {
            console.log("Option 1 selected")
        }
    }
}
1
2
3
4
5
6
7
8
9

通过设置 text 属性来指定每个选项的文本内容。通过设置 checked 属性来指定默认选中的选项。当用户选择不同的选项时,onCheckedChanged 信号会触发,我们在信号处理中输出相应的信息到控制台。

# 4.1.5 ButtonGroup

在 QML 中,ButtonGroup 是一个用于管理一组按钮的组件,通常与单选按钮(如 RadioButton)一起使用,以确保在一组按钮中只有一个按钮被选中。

Item {
    width: 200
    height: 200

    ButtonGroup {
        id: buttonGroup
    }

    Column {
        spacing: 10

        RadioButton {
            text: "Option 1"
            checked: true
            ButtonGroup.group: buttonGroup
            onCheckedChanged: {
                if (checked) {
                    console.log("Option 1 selected")
                }
            }
        }

        RadioButton {
            text: "Option 2"
            ButtonGroup.group: buttonGroup
            onCheckedChanged: {
                if (checked) {
                    console.log("Option 2 selected")
                }
            }
        }

        RadioButton {
            text: "Option 3"
            ButtonGroup.group: buttonGroup
            onCheckedChanged: {
                if (checked) {
                    console.log("Option 3 selected")
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

ButtonGroup 控件用于管理一组单选按钮。每个 RadioButton 控件通过设置 ButtonGroup.group 属性来指定它们属于哪个按钮组。当用户选择不同的选项时,onCheckedChanged 信号会触发,我们在信号处理中输出相应的信息到控制台。

# 4.1.6 RoundButton

在 QML 中,RoundButton 是一个自定义的圆形按钮控件,通常用于创建具有圆形外观的按钮。

Rectangle {
    width: 100
    height: 100
    radius: width / 2
    color: "lightblue"
    border.color: "blue"
    border.width: 2

    MouseArea {
        anchors.fill: parent
        onClicked: {
            console.log("RoundButton clicked")
        }
    }

    Text {
        anchors.centerIn: parent
        text: "Click Me"
        font.pixelSize: 16
        color: "white"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

创建了一个圆形按钮,通过一个 Rectangle 控件来实现。设置 width 和 height 为相同的值,使其成为一个正圆形。通过设置 radius 为宽度的一半,将矩形的边角变为圆形,从而实现圆形外观。

我们还添加了一个 MouseArea 用于捕获点击事件,并在点击时输出信息到控制台。

# 4.1.7 Switch

在 QML 中,Switch 是一个用于表示开关状态的控件,通常用于在两种状态之间切换(例如打开和关闭)。

Switch {
    id: mySwitch
    checked: true // 默认为打开状态
    anchors.centerIn: parent

    onCheckedChanged: {
        if (checked) {
            console.log("Switch is ON")
        } else {
            console.log("Switch is OFF")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

在这个示例中,我们创建了一个 Switch 控件,并设置了以下属性和信号处理:

  • checked: true:设置开关的初始状态为打开。
  • anchors.centerIn: parent:将开关控件居中放置在父容器中。
  • onCheckedChanged 信号处理:当开关状态发生变化时触发,根据开关的状态输出相应的信息到控制台。

# 4.1.8 DelayButton

在 QML 中,如果你想要创建一个延迟响应的按钮(DelayButton),可以通过结合使用 Timer 组件和 MouseArea 组件来实现。

这样可以在用户点击按钮后添加一个延迟,以防止用户多次点击按钮。

import QtQuick 2.15
import QtQuick.Controls 2.15

Item {
    width: 200
    height: 100

    Timer {
        id: clickTimer
        interval: 1000 // 1秒延迟
        onTriggered: {
            button.enabled = true
        }
    }

    Button {
        id: button
        text: "Click Me"
        enabled: true
        anchors.centerIn: parent

        MouseArea {
            anchors.fill: parent
            onClicked: {
                button.enabled = false
                clickTimer.start()
                console.log("Button clicked")
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

创建了一个 Button 控件和一个 Timer 控件。当用户点击按钮时,按钮会被禁用,并且 Timer 开始计时。在计时结束后(1秒后),按钮重新启用。这样可以确保用户在点击按钮后有一定的延迟时间,防止多次点击。

通过结合使用 Timer 和 MouseArea,你可以实现一个简单的延迟响应按钮。

# 4.2 指示类控件

# 4.2.1 Label

在 QML 中,Label 是用于显示文本内容的控件,通常用于在界面中展示静态文本信息。Label 控件可以显示纯文本、富文本、图像等内容。

Label {
    text: "Hello, World!"
    anchors.centerIn: parent
    font.pixelSize: 20
    color: "blue"
    wrapMode: Text.WordWrap
}
1
2
3
4
5
6
7

在这个示例中,我们创建了一个 Label 控件,并设置了以下属性:

  • text: "Hello, World!":设置要显示的文本内容为 "Hello, World!"。
  • anchors.centerIn: parent:将 Label 控件居中放置在父容器中。
  • font.pixelSize: 20:设置文本的字体大小为 20 像素。
  • color: "blue":设置文本颜色为蓝色。
  • wrapMode: Text.WordWrap:设置文本换行模式为单词换行,以确保文本在需要时自动换行。

# 4.2.2 ProgressBard

在 QML 中,使用 ProgressBar 控件可以很容易地显示进度条。以下是一个简单的示例,展示如何在 QML 中使用 ProgressBar 控件:

ProgressBar {
    id: progressBar
    value: 50 // 设置进度条的当前值(0-100),设置进度条的当前值为 50,表示完成了 50% 的任务。
    anchors.centerIn: parent  // 将进度条控件居中放置在父容器中。
    width: 200  // 设置进度条的宽度为 200 像素。
}
1
2
3
4
5
6

此外,ProgressBar 控件还提供其他属性,如 minimumValue 和 maximumValue,以及样式属性,如 color 和 background,可以根据需求进行定制。

# 4.2.3 BusyIndicator

在 QML 中,BusyIndicator 控件用于显示一个旋转的指示器,表示应用程序正在忙于处理任务。下面是一个简单的示例,展示如何在 QML 中使用 BusyIndicator 控件:

BusyIndicator {
    anchors.centerIn: parent  // 将 `BusyIndicator` 控件居中放置在父容器中。
    running: true // 设置为 true 表示显示旋转指示器,表示应用程序正在忙于处理任务。
}
1
2
3
4

根据需要调整 BusyIndicator 控件的属性,如 size、color、visible 等,以满足你的设计需求。BusyIndicator 控件通常用于指示应用程序正在进行某些耗时操作,让用户知道应用程序仍在运行。

# 4.2.4 PageIndicator

在 QML 中,PageIndicator 控件用于显示页面指示器,通常用于指示当前页面在多页视图中的位置。下面是一个简单的示例,展示如何在 QML 中使用 PageIndicator 控件:

PageIndicator {
    id: pageIndicator
    count: 5 // 设置页面数量。设置页面指示器的总页面数量为 5。
    currentIndex: 2 // 设置当前页面索引,设置当前页面的索引为 2,表示当前位于第三个页面(索引从 0 开始)。
    anchors.bottom: parent.bottom
    anchors.horizontalCenter: parent.horizontalCenter
}
1
2
3
4
5
6
7

根据需要调整 PageIndicator 控件的属性,如 count、currentIndex、interactive 等,以满足你的设计需求。PageIndicator 控件通常用于指示用户当前所处的页面,特别适用于多页视图或轮播式内容。

# 4.3 输入类控件

# 4.3.1 TextField

在 QML 中,TextField 控件用于接收用户输入的文本。下面是一个简单的示例,展示如何在 QML 中使用 TextField 控件:

TextField {
    id: textInput
    placeholderText: "Enter your name" // 设置一个提示文本,提示用户在文本框中输入内容。
    anchors.centerIn: parent  // 将 `TextField` 控件居中放置在父容器中。
    width: 200  // 设置文本框的宽度为 200 像素。
    onTextChanged: {
        console.log("User input: " + textInput.text)  //当用户输入文本时触发的信号,我们在这里使用 `console.log` 打印用户输入的文本。
    }
}
1
2
3
4
5
6
7
8
9

根据需要调整 TextField 控件的属性,如 text、placeholderText、inputMethodHints 等,以满足你的设计需求。TextField 控件通常用于接收用户输入的文本,例如用户名、密码、搜索关键字等。

# 4.3.2 TextArea

在 QML 中,TextArea 控件用于显示多行文本,并允许用户输入和编辑文本。下面是一个简单的示例,展示如何在 QML 中使用 TextArea 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: "TextArea Example"

    TextArea {
        id: textArea
        placeholderText: "Enter your text here" // 提示用户输入的文本
        anchors.fill: parent
        wrapMode: TextEdit.Wrap // 设置文本自动换行
        onTextChanged: {
            console.log("User input: " + textArea.text)
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 TextArea 控件。以下是一些关键属性的说明:

  • placeholderText: "Enter your text here":设置一个提示文本,提示用户在文本区域中输入内容。
  • anchors.fill: parent:将 TextArea 控件填充整个父容器。
  • wrapMode: TextEdit.Wrap:设置文本自动换行,以便在达到文本区域边界时自动换行。
  • onTextChanged:当用户输入文本时触发的信号,我们在这里使用 console.log 打印用户输入的文本。

你可以根据需要调整 TextArea 控件的属性,如 text、placeholderText、wrapMode 等,以满足你的设计需求。TextArea 控件通常用于接收用户输入的多行文本,例如评论、描述、消息等。

通过使用 TextArea 控件,你可以让用户输入和编辑多行文本内容,提供更灵活的文本输入功能。希望这个示例能帮助你开始使用 TextArea 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.3 ComboBox

在 QML 中,ComboBox 控件用于创建下拉框,允许用户从预定义的选项中进行选择。下面是一个简单的示例,展示如何在 QML 中使用 ComboBox 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "ComboBox Example"

    ComboBox {
        id: comboBox
        model: ["Option 1", "Option 2", "Option 3"] // 下拉框选项
        currentIndex: 0 // 默认选中的选项索引
        anchors.centerIn: parent
        onActivated: {
            console.log("Selected option: " + comboBox.currentText)
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 ComboBox 控件。以下是一些关键属性的说明:

  • model: ["Option 1", "Option 2", "Option 3"]:设置下拉框的选项,这里包含三个选项。
  • currentIndex: 0:设置默认选中的选项索引为 0,即默认选中第一个选项。
  • anchors.centerIn: parent:将 ComboBox 控件居中放置在父容器中。
  • onActivated:当用户选择下拉框中的选项时触发的信号,我们在这里使用 console.log 打印用户选择的选项文本。

你可以根据需要调整 ComboBox 控件的属性,如 model、currentIndex、currentText 等,以满足你的设计需求。ComboBox 控件通常用于提供用户选择预定义选项的功能,例如选择列表、过滤选项等。

通过使用 ComboBox 控件,你可以让用户从预定义的选项中进行选择,提供更好的用户交互体验。希望这个示例能帮助你开始使用 ComboBox 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.4 SpinBox

在 QML 中,SpinBox 控件用于显示一个可调整数值的微调框,允许用户通过增加或减少按钮来调整数值。下面是一个简单的示例,展示如何在 QML 中使用 SpinBox 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "SpinBox Example"

    SpinBox {
        id: spinBox
        from: 0 // 设置最小值
        to: 100 // 设置最大值
        stepSize: 1 // 设置步长
        value: 50 // 设置初始值
        anchors.centerIn: parent
        onValueChanged: {
            console.log("Current value: " + spinBox.value)
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 SpinBox 控件。以下是一些关键属性的说明:

  • from: 0:设置微调框的最小值为 0。
  • to: 100:设置微调框的最大值为 100。
  • stepSize: 1:设置微调框的步长为 1,即每次增加或减少的值。
  • value: 50:设置微调框的初始值为 50。
  • anchors.centerIn: parent:将 SpinBox 控件居中放置在父容器中。
  • onValueChanged:当用户调整数值时触发的信号,我们在这里使用 console.log 打印当前数值。

你可以根据需要调整 SpinBox 控件的属性,如 from、to、stepSize、value 等,以满足你的设计需求。SpinBox 控件通常用于允许用户调整数值,例如设置参数、调整数量等。

通过使用 SpinBox 控件,你可以为用户提供一个方便的数值调整功能,让用户可以轻松地调整数值。希望这个示例能帮助你开始使用 SpinBox 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.5 Dial

在 QML 中,Dial 控件用于显示一个旋转式的调节器,允许用户通过旋转来调整数值。下面是一个简单的示例,展示如何在 QML 中使用 Dial 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 400
    title: "Dial Example"

    Dial {
        id: dial
        from: 0 // 设置最小值
        to: 100 // 设置最大值
        stepSize: 1 // 设置步长
        value: 50 // 设置初始值
        anchors.centerIn: parent
        onValueChanged: {
            console.log("Current value: " + dial.value)
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 Dial 控件。以下是一些关键属性的说明:

  • from: 0:设置调节器的最小值为 0。
  • to: 100:设置调节器的最大值为 100。
  • stepSize: 1:设置调节器的步长为 1,即每次旋转增加或减少的值。
  • value: 50:设置调节器的初始值为 50。
  • anchors.centerIn: parent:将 Dial 控件居中放置在父容器中。
  • onValueChanged:当用户旋转调节器时触发的信号,我们在这里使用 console.log 打印当前数值。

你可以根据需要调整 Dial 控件的属性,如 from、to、stepSize、value 等,以满足你的设计需求。Dial 控件通常用于允许用户通过旋转来调整数值,例如调整音量、亮度等。

通过使用 Dial 控件,你可以为用户提供一个直观的旋转式调节器,让用户可以通过旋转来调整数值。希望这个示例能帮助你开始使用 Dial 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.6 Slider

在 QML 中,Slider 控件用于显示一个滑块,允许用户通过拖动滑块来调整数值。下面是一个简单的示例,展示如何在 QML 中使用 Slider 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "Slider Example"

    Slider {
        id: slider
        from: 0 // 设置最小值
        to: 100 // 设置最大值
        stepSize: 1 // 设置步长
        value: 50 // 设置初始值
        anchors.centerIn: parent
        onValueChanged: {
            console.log("Current value: " + slider.value)
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 Slider 控件。以下是一些关键属性的说明:

  • from: 0:设置滑块的最小值为 0。
  • to: 100:设置滑块的最大值为 100。
  • stepSize: 1:设置滑块的步长为 1,即每次拖动增加或减少的值。
  • value: 50:设置滑块的初始值为 50。
  • anchors.centerIn: parent:将 Slider 控件居中放置在父容器中。
  • onValueChanged:当用户拖动滑块时触发的信号,我们在这里使用 console.log 打印当前数值。

你可以根据需要调整 Slider 控件的属性,如 from、to、stepSize、value 等,以满足你的设计需求。Slider 控件通常用于允许用户通过拖动滑块来调整数值,例如调整音量、亮度等。

通过使用 Slider 控件,你可以为用户提供一个直观的滑块控件,让用户可以通过拖动来调整数值。希望这个示例能帮助你开始使用 Slider 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.7 RangeSlider

在 QML 中,RangeSlider 控件用于显示一个范围滑块,允许用户通过拖动两个滑块来选择一个数值范围。下面是一个简单的示例,展示如何在 QML 中使用 RangeSlider 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "RangeSlider Example"

    RangeSlider {
        id: rangeSlider
        from: 0 // 设置范围滑块的最小值
        to: 100 // 设置范围滑块的最大值
        stepSize: 1 // 设置步长
        values: [25, 75] // 设置初始范围值
        anchors.centerIn: parent
        onValuesChanged: {
            console.log("Selected range: " + rangeSlider.values[0] + " - " + rangeSlider.values[1])
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 RangeSlider 控件。以下是一些关键属性的说明:

  • from: 0:设置范围滑块的最小值为 0。
  • to: 100:设置范围滑块的最大值为 100。
  • stepSize: 1:设置范围滑块的步长为 1,即每次拖动增加或减少的值。
  • values: [25, 75]:设置范围滑块的初始范围值为 25 到 75。
  • anchors.centerIn: parent:将 RangeSlider 控件居中放置在父容器中。
  • onValuesChanged:当用户拖动范围滑块时触发的信号,我们在这里使用 console.log 打印当前选择的数值范围。

你可以根据需要调整 RangeSlider 控件的属性,如 from、to、stepSize、values 等,以满足你的设计需求。RangeSlider 控件通常用于允许用户选择一个数值范围,例如选择时间范围、价格范围等。

通过使用 RangeSlider 控件,你可以为用户提供一个方便的范围选择功能,让用户可以通过拖动两个滑块来选择一个数值范围。希望这个示例能帮助你开始使用 RangeSlider 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.8 Tumbler

在 QML 中,Tumbler 控件用于显示一个滚轮式的选择器,允许用户通过滚动来选择不同的选项。下面是一个简单的示例,展示如何在 QML 中使用 Tumbler 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 200
    height: 200
    title: "Tumbler Example"

    Tumbler {
        id: tumbler
        model: ["Option 1", "Option 2", "Option 3"] // 设置滚轮的选项
        currentIndex: 0 // 设置初始选中的选项索引
        anchors.centerIn: parent
        onCurrentIndexChanged: {
            console.log("Selected option: " + tumbler.currentItem)
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 Tumbler 控件。以下是一些关键属性的说明:

  • model: ["Option 1", "Option 2", "Option 3"]:设置滚轮的选项,这里包含三个选项。
  • currentIndex: 0:设置初始选中的选项索引为 0,即默认选中第一个选项。
  • anchors.centerIn: parent:将 Tumbler 控件居中放置在父容器中。
  • onCurrentIndexChanged:当用户滚动选择器时触发的信号,我们在这里使用 console.log 打印当前选择的选项文本。

你可以根据需要调整 Tumbler 控件的属性,如 model、currentIndex、currentItem 等,以满足你的设计需求。Tumbler 控件通常用于提供一个滚轮式的选择器,让用户可以通过滚动来选择不同的选项。

通过使用 Tumbler 控件,你可以为用户提供一个直观的滚轮选择器,让用户可以通过滚动来选择不同的选项。希望这个示例能帮助你开始使用 Tumbler 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.3.9 输入法使用

在 Qt Quick/QML 中,Qt.inputMethod 是一个全局对象,用于与输入法(如虚拟键盘)进行交互。它提供了控制输入法显示、隐藏、提交内容等功能。

Qt.inputMethod 提供了以下常用方法和属性:

方法:

  • show():显示输入法。
  • hide():隐藏输入法。
  • commit():提交输入法的当前内容到关联的控件。
  • reset():重置输入法的状态。
  • update():更新输入法的状态(如输入提示、输入模式等)。

属性:

  • visible:输入法是否可见(true 表示可见,false 表示隐藏)。
  • keyboardRectangle:输入法键盘的几何区域(Rect 类型)。
  • cursorRectangle:输入法光标所在的几何区域(Rect 类型)。
  • animating:输入法是否正在执行动画(如显示或隐藏动画)。

通过 Qt.inputMethod.commit() 可以将输入法的当前内容提交到关联的控件(如 TextField)。

TextField {
    id: textField
    width: 200
    placeholderText: "请输入内容"
    anchors.centerIn: parent
}

Button {
    text: "提交并隐藏"
    anchors.top: textField.bottom
    anchors.horizontalCenter: parent.horizontalCenter
    onClicked: {
        Qt.inputMethod.commit(); // 提交输入法内容
        Qt.inputMethod.hide();   // 隐藏输入法
        console.log("输入内容: " + textField.text);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 4.4 菜单类控件

# 4.4.1 Menu

在 QML 中,Menu 控件用于创建弹出式菜单,允许用户从一组选项中进行选择。下面是一个简单的示例,展示如何在 QML 中使用 Menu 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "Menu Example"

    Menu {
        id: menu
        MenuItem {
            text: "Option 1"
            onTriggered: console.log("Option 1 selected")
        }
        MenuItem {
            text: "Option 2"
            onTriggered: console.log("Option 2 selected")
        }
        MenuItem {
            text: "Option 3"
            onTriggered: console.log("Option 3 selected")
        }

        Button {
            text: "Open Menu"
            onClicked: menu.open()
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 Menu 控件和一个按钮。以下是一些关键属性的说明:

  • MenuItem:用于定义菜单中的每个选项,其中的 text 属性用于设置选项的文本,onTriggered 信号用于处理选项被选择时的操作。
  • Button:用于触发打开菜单的操作,当按钮被点击时,调用 menu.open() 方法打开菜单。
  • menu.open():用于打开菜单,显示用户可以选择的选项。

你可以根据需要在 Menu 控件中添加更多的 MenuItem,以提供更多选项供用户选择。通过使用 Menu 控件,你可以为用户提供一个方便的弹出式菜单,让用户可以从中选择不同的选项。

希望这个示例能帮助你开始使用 Menu 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.4.2 MenuBar

在 QML 中,MenuBar 控件用于创建一个菜单栏,通常用于显示应用程序的主要菜单选项。下面是一个简单的示例,展示如何在 QML 中使用 MenuBar 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "MenuBar Example"

    MenuBar {
        Menu {
            title: "File"
            MenuItem { text: "New" }
            MenuItem { text: "Open" }
            MenuItem { text: "Save" }
        }

        Menu {
            title: "Edit"
            MenuItem { text: "Cut" }
            MenuItem { text: "Copy" }
            MenuItem { text: "Paste" }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 MenuBar 控件和两个菜单。以下是一些关键属性的说明:

  • MenuBar:用于创建一个菜单栏,其中包含一个或多个 Menu。
  • Menu:用于定义菜单栏中的每个菜单,其中的 title 属性用于设置菜单的标题。
  • MenuItem:用于定义每个菜单中的选项,其中的 text 属性用于设置选项的文本。

通过使用 MenuBar 控件,你可以为应用程序创建一个具有多个菜单的菜单栏,让用户可以方便地访问不同的功能选项。

希望这个示例能帮助你开始使用 MenuBar 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5 容器类控件

# 4.5.1 Pane

在 QML 中,Pane 控件用于创建一个简单的容器,用于组织其他控件或元素。下面是一个简单的示例,展示如何在 QML 中使用 Pane 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "Pane Example"

    Pane {
        width: 300
        height: 150
        anchors.centerIn: parent
        color: "lightblue"

        Text {
            text: "Hello, World!"
            anchors.centerIn: parent
            font.pixelSize: 20
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 Pane 控件。在 Pane 控件中,我们放置了一个文本控件 Text,用于显示 "Hello, World!"。

以下是一些关键属性的说明:

  • width: 300 和 height: 150:设置 Pane 控件的宽度和高度。
  • anchors.centerIn: parent:将 Pane 控件居中放置在父容器中。
  • color: "lightblue":设置 Pane 控件的背景颜色为浅蓝色。
  • Text 控件用于显示文本 "Hello, World!",并设置了字体大小为 20 像素。

通过使用 Pane 控件,你可以创建一个简单的容器来组织其他控件或元素,帮助你更好地布局和管理界面中的内容。

希望这个示例能帮助你开始使用 Pane 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.2 Frame

在 QML 中,Frame 控件用于创建一个带有边框的矩形框架,用于装饰和突出显示其他控件或内容。下面是一个简单的示例,展示如何在 QML 中使用 Frame 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "Frame Example"

    Frame {
        width: 300
        height: 150
        anchors.centerIn: parent
        border.color: "blue"
        border.width: 2

        Text {
            text: "This is a framed text"
            anchors.centerIn: parent
            font.pixelSize: 20
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 Frame 控件。在 Frame 控件中,我们放置了一个文本控件 Text,用于显示 "This is a framed text"。

以下是一些关键属性的说明:

  • width: 300 和 height: 150:设置 Frame 控件的宽度和高度。
  • anchors.centerIn: parent:将 Frame 控件居中放置在父容器中。
  • border.color: "blue":设置 Frame 控件的边框颜色为蓝色。
  • border.width: 2:设置 Frame 控件的边框宽度为 2 像素。
  • Text 控件用于显示文本 "This is a framed text",并设置了字体大小为 20 像素。

通过使用 Frame 控件,你可以为界面中的内容添加装饰性的边框,突出显示特定区域或元素。

希望这个示例能帮助你开始使用 Frame 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.3 GroupBox

在 QML 中,GroupBox 控件用于创建一个带有标题的分组框,用于将相关的控件或内容组织在一起。下面是一个简单的示例,展示如何在 QML 中使用 GroupBox 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "GroupBox Example"

    GroupBox {
        title: "Personal Information"
        width: 300
        height: 150
        anchors.centerIn: parent

        Column {
            anchors.fill: parent
            spacing: 10

            TextField {
                placeholderText: "Name"
            }

            TextField {
                placeholderText: "Email"
            }

            TextField {
                placeholderText: "Phone"
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 GroupBox 控件。在 GroupBox 控件中,我们设置了标题为 "Personal Information",并在分组框内放置了三个文本输入框 TextField,用于输入姓名、电子邮件和电话号码。

以下是一些关键属性的说明:

  • title: "Personal Information":设置 GroupBox 控件的标题。
  • width: 300 和 height: 150:设置 GroupBox 控件的宽度和高度。
  • Column:用于垂直排列子控件。
  • TextField 控件用于输入文本,其中的 placeholderText 属性用于设置占位文本。

通过使用 GroupBox 控件,你可以将相关的控件或内容组织在一起,并为它们提供一个标题,以便更好地组织和展示界面中的信息。

希望这个示例能帮助你开始使用 GroupBox 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.4 ScrollView

在 QML 中,ScrollView 控件用于创建一个可滚动的视图区域,以便在界面中显示超出可见区域的内容。下面是一个简单的示例,展示如何在 QML 中使用 ScrollView 控件:

ScrollView {
    width: 300
    height: 150
    anchors.centerIn: parent

    Column {
        spacing: 10

        Repeater {
            model: 20
            delegate: Text {
                text: "Item " + index
                font.pixelSize: 16
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 ScrollView 控件。在 ScrollView 控件中,我们放置了一个 Column 布局,其中包含一个 Repeater 控件,用于重复显示文本控件 Text。

以下是一些关键属性的说明:

  • width: 300 和 height: 150:设置 ScrollView 控件的宽度和高度。
  • Column:用于垂直排列子控件。
  • Repeater 控件用于重复创建子控件,这里用来创建多个文本控件。
  • Text 控件用于显示文本,其中的 text 属性设置为 "Item " 加上当前索引值。
  • contentWidth 和 contentHeight:定义内容区域的宽度和高度。
  • ScrollBar.horizontal 和 ScrollBar.vertical:自定义水平或垂直滚动条的样式和行为。
  • ScrollBar.policy:控制滚动条的显示策略。比如ScrollBar.vertical.policy: ScrollBar.AlwaysOn始终显示。

通过使用 ScrollView 控件,当内容超出可见区域时,用户可以通过滚动视图来查看所有内容。这对于显示大量内容或需要滚动查看的内容非常有用。

# 4.5.5 Page

在 QML 中,Page 是用于构建页面布局的常用组件,通常与 StackView 或 SwipeView 结合使用,以实现多页面导航。

Page 是一个容器组件,通常用于表示一个完整的页面。它可以包含标题栏、内容区域和页脚。

Page {
    anchors.fill: parent
    
    // 自定义背景
    // 可以通过 `background` 属性自定义页面的背景。
    background: Rectangle {
        color: "lightblue"
        border.color: "gray"
        border.width: 2
    }

    // 标题栏
    header: Label {
        text: "我的页面"
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        padding: 10
    }

    // 内容区域
    Column {
        anchors.centerIn: parent
        spacing: 10

        Button {
            text: "按钮 1"
            onClicked: console.log("按钮 1 被点击")
        }

        Button {
            text: "按钮 2"
            onClicked: console.log("按钮 2 被点击")
        }
    }

    // 页脚
    footer: Label {
        text: "页脚信息"
        font.pixelSize: 12
        horizontalAlignment: Text.AlignHCenter
        padding: 10
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

说明:header:定义页面的标题栏。footer:定义页面的页脚。内容区域可以放置任何 QML 组件(如 Column、Row、Button 等)。

# 4.5.6 ScrollBar

在 QML 中,ScrollBar 控件用于创建一个滚动条,允许用户在可滚动区域中浏览内容。下面是一个简单的示例,展示如何在 QML 中使用 ScrollBar 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "ScrollBar Example"

    ScrollView {
        width: 300
        height: 150
        anchors.centerIn: parent

        Column {
            spacing: 10

            Repeater {
                model: 20
                delegate: Text {
                    text: "Item " + index
                    font.pixelSize: 16
                }
            }
        }

        ScrollBar.vertical: ScrollBar {
            policy: ScrollBar.AlwaysOn
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 ScrollView 控件。在 ScrollView 控件中,我们放置了一个 Column 布局,其中包含一个 Repeater 控件用于重复显示文本控件 Text。

关于 ScrollBar 控件的说明如下:

  • ScrollBar.vertical:用于在 ScrollView 中添加垂直滚动条。
  • policy: ScrollBar.AlwaysOn:设置滚动条始终显示,即使内容未超出可见区域。

通过使用 ScrollBar 控件,用户可以通过滚动条来浏览超出可见区域的内容。这对于需要精确控制滚动的情况非常有用。

希望这个示例能帮助你开始使用 ScrollBar 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.7 StackView

# 4.5.8 TabBar

在 QML 中,TabBar 控件用于创建一个选项卡栏,允许用户在不同的选项卡之间切换内容。下面是一个简单的示例,展示如何在 QML 中使用 TabBar 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "TabBar Example"

    TabBar {
        width: parent.width
        TabButton {
            text: "Tab 1"
            onClicked: console.log("Switched to Tab 1")
        }
        TabButton {
            text: "Tab 2"
            onClicked: console.log("Switched to Tab 2")
        }
        TabButton {
            text: "Tab 3"
            onClicked: console.log("Switched to Tab 3")
        }
    }

    StackView {
        anchors.top: tabbar.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom

        initialItem: Item {
            Rectangle {
                color: "lightblue"
                anchors.fill: parent
                Text {
                    text: "Content for Tab 1"
                    anchors.centerIn: parent
                }
            }
        }

        Component {
            id: tab1Content
            Rectangle {
                color: "lightgreen"
                anchors.fill: parent
                Text {
                    text: "Content for Tab 1"
                    anchors.centerIn: parent
                }
            }
        }

        Component {
            id: tab2Content
            Rectangle {
                color: "lightcoral"
                anchors.fill: parent
                Text {
                    text: "Content for Tab 2"
                    anchors.centerIn: parent
                }
            }
        }

        Component {
            id: tab3Content
            Rectangle {
                color: "lightyellow"
                anchors.fill: parent
                Text {
                    text: "Content for Tab 3"
                    anchors.centerIn: parent
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 TabBar 控件,其中包含三个选项卡。每个选项卡都有一个 TabButton 控件,用于显示选项卡的文本,并在点击时触发相应的操作。

  • TabButton 控件的 text 属性用于设置选项卡的文本。
  • onClicked 信号用于在点击选项卡时执行相应的操作。

在 StackView 中,我们定义了三个不同的内容组件,分别对应三个选项卡的内容。通过 StackView 控件,可以在不同的选项卡之间切换显示不同的内容。

通过使用 TabBar 控件,用户可以方便地在不同的选项卡之间切换内容,使界面更加交互和易用。

希望这个示例能帮助你开始使用 TabBar 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.9 ToolBar

在 QML 中,ToolBar 控件用于创建一个工具栏,通常用于放置各种操作按钮、工具按钮或其他控件,以便用户可以方便地访问这些功能。下面是一个简单的示例,展示如何在 QML 中使用 ToolBar 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "ToolBar Example"

    ToolBar {
        RowLayout {
            ToolButton {
                text: "Open"
                onClicked: console.log("Open button clicked")
            }

            ToolButton {
                text: "Save"
                onClicked: console.log("Save button clicked")
            }

            ToolButton {
                text: "Print"
                onClicked: console.log("Print button clicked")
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 ToolBar 控件。在 ToolBar 控件中,我们使用 RowLayout 布局来水平排列工具按钮 ToolButton 控件。

  • ToolButton 控件的 text 属性用于设置按钮的文本。
  • onClicked 信号用于在点击按钮时执行相应的操作。

通过使用 ToolBar 控件,你可以方便地将各种操作按钮或工具按钮组织在一起,使用户可以快速访问这些功能。你可以根据需要在工具栏中添加不同的控件,以满足你的界面设计和功能需求。

希望这个示例能帮助你开始使用 ToolBar 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.10 SwipeView

在 QML 中,SwipeView 控件用于创建一个可滑动的视图容器,允许用户通过水平或垂直滑动来浏览不同的页面或内容。下面是一个简单的示例,展示如何在 QML 中使用 SwipeView 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "SwipeView Example"

    SwipeView {
        anchors.fill: parent

        Item {
            Rectangle {
                color: "lightblue"
                width: parent.width
                height: parent.height
                Text {
                    text: "Page 1"
                    anchors.centerIn: parent
                }
            }
        }

        Item {
            Rectangle {
                color: "lightgreen"
                width: parent.width
                height: parent.height
                Text {
                    text: "Page 2"
                    anchors.centerIn: parent
                }
            }
        }

        Item {
            Rectangle {
                color: "lightcoral"
                width: parent.width
                height: parent.height
                Text {
                    text: "Page 3"
                    anchors.centerIn: parent
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个 SwipeView 控件。在 SwipeView 控件中,我们添加了三个不同的页面,每个页面都包含一个带有不同背景颜色和文本的矩形。

通过在 SwipeView 中添加不同的页面,用户可以通过水平滑动来浏览这些页面,从而实现内容的切换和浏览。

  • anchors.fill: parent:使 SwipeView 控件填充父级容器的大小。
  • 每个 Item 内部包含一个带有不同颜色和文本的 Rectangle,用于表示不同的页面内容。

通过使用 SwipeView 控件,你可以创建一个可滑动的视图容器,用于展示多个页面或内容,并允许用户通过滑动来浏览这些内容。

希望这个示例能帮助你开始使用 SwipeView 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.5.11 ColumnLayout

在 QML 中,ColumnLayout 是一种布局容器,用于垂直排列子元素。通过使用 ColumnLayout,你可以方便地将子元素按垂直方向进行布局。

import QtQuick.Controls 2.15

ColumnLayout {
    spacing: 10 // 设置子元素之间的间距

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

    Rectangle {
        width: 100
        height: 50
        color: "green"
    }

    Rectangle {
        width: 100
        height: 50
        color: "blue"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

在这个示例中,我们创建了一个 ColumnLayout,并在其中放置了三个矩形元素。这些矩形元素将按照垂直方向依次排列,由于设置了 spacing: 10,它们之间会有 10 像素的间距。

通过使用 ColumnLayout,你可以轻松地实现垂直布局,而不必手动计算每个元素的位置。ColumnLayout 会自动调整子元素的位置和大小,使布局更加简单和灵活。

除了 spacing 属性,ColumnLayout 还提供了其他属性,如 anchors, fillWidth, fillHeight 等,可以帮助你更好地控制布局。你可以根据需要调整这些属性来满足布局的要求。

# 4.5.12 RowLayout

在 QML 中,RowLayout 是一种布局容器,用于水平排列子元素。通过使用 RowLayout,你可以方便地将子元素按水平方向进行布局。

import QtQuick.Controls 2.15

RowLayout {
    spacing: 10 // 设置子元素之间的间距

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

    Rectangle {
        width: 50
        height: 100
        color: "green"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

除了 spacing 属性,RowLayout 还提供了其他属性,如 anchors, fillWidth, fillHeight 等,可以帮助你更好地控制布局。你可以根据需要调整这些属性来满足布局的要求。

# 4.6 弹出类控件

# 4.6.1 Popup

在 Qt Quick (QML) 中,Popup 是一个用于显示弹出窗口的控件。它通常用于显示模态对话框、菜单、提示信息等。Popup 继承自 QtQuick.Controls 模块,因此需要先导入该模块。

  1. 创建 Popup: 使用 Popup 控件定义弹出窗口的内容。 通过 open() 方法显示弹出窗口,close() 方法关闭弹出窗口。
  2. 常用属性:
  • visible:控制弹出窗口的可见性。
  • modal:是否模态(阻止背景交互)。
  • dim:是否在背景上显示遮罩层。
  • x 和 y:弹出窗口的位置。
  • width 和 height:弹出窗口的大小。
  1. 常用信号:onOpened:弹出窗口打开时触发。onClosed:弹出窗口关闭时触发。

以下是一个简单的 Popup 示例,点击按钮显示弹出窗口,并在弹出窗口中显示内容。

import QtQuick 2.15
import QtQuick.Controls 2.15

Rectangle {
    id:root
    width: 800;
    height: 600;

    // 按钮用于打开弹出窗口
    Button {
        text: "Open Popup"
        anchors.centerIn: parent
        onClicked: popup.open()
    }


    // 弹出窗口
    Popup {
        id: popup
        //可以通过设置 `x` 和 `y` 属性来自定义弹出窗口的位置。
        x: (parent.width - width) / 2 // 居中显示
        y: (parent.height - height) / 2
        width: 300
        height: 200
        modal: true // 模态弹出窗口
        dim: true // 显示背景遮罩层

        // 淡入动画
        enter: Transition {
            NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200 }
        }

        // 淡出动画
        exit: Transition {
            NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200 }
        }

        // 弹出窗口内容
        Column {
            anchors.centerIn: parent
            spacing: 10

            Text {
                text: "This is a Popup!"
                font.pixelSize: 20
            }

            Button {
                text: "Close"
                onClicked: popup.close()
            }
        }

        // 弹出窗口打开时触发
        onOpened: {
            console.log("Popup opened");
        }

        // 弹出窗口关闭时触发
        onClosed: {
            console.log("Popup closed");
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
功能 实现方式
基本弹出窗口 使用 Popup 控件
自定义位置 设置 x 和 y 属性
动态内容 使用属性绑定动态更新内容
动画效果 使用 enter 和 exit 过渡动画

# 4.6.2 Dialog

在 Qt Quick (QML) 中,Dialog 是一个用于显示对话框的控件。它通常用于显示模态对话框,例如确认对话框、输入对话框等。Dialog 继承自 QtQuick.Controls 模块,因此需要先导入该模块。

  1. 创建 Dialog:使用 Dialog 控件定义对话框的内容。通过 open() 方法显示对话框,close() 方法关闭对话框。
  2. 常用属性:
  • visible:控制对话框的可见性。
  • modal:是否模态(阻止背景交互)。
  • title:对话框的标题。
  • standardButtons:标准按钮(如 Dialog.Ok、Dialog.Cancel 等)。
  1. 常用信号:onAccepted:用户点击确认按钮时触发。onRejected:用户点击取消按钮时触发。

以下是一个简单的 Dialog 示例,点击按钮显示对话框,并在对话框中显示内容。

//点击按钮显示对话框
Rectangle {
    id:root
    visible: true
    width: 480
    height: 800


    // 按钮用于打开对话框
    Button {
        text: "Open Dialog"
        anchors.centerIn: parent
        onClicked: dialog.open()
    }

    // 对话框
    Dialog {
        id: dialog
        x: (parent.width - width) / 2 // 居中显示
        y: (parent.height - height) / 2
        width: 300
        height: 200
        modal: true // 模态对话框
        title: "My Dialog"

        // 对话框内容
        Column {
            anchors.centerIn: parent
            spacing: 10

            Text {
                text: "This is a Dialog!"
                font.pixelSize: 20
            }
        }

        // 标准按钮
        standardButtons: Dialog.Ok | Dialog.Cancel

        // 用户点击确认按钮时触发
        onAccepted: {
            console.log("Dialog accepted");
        }

        // 用户点击取消按钮时触发
        onRejected: {
            console.log("Dialog rejected");
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
功能 实现方式
基本对话框 使用 Dialog 控件
自定义按钮 使用 footer 和 Button 控件
动态内容 使用属性绑定动态更新内容
输入对话框 添加 TextField 或其他输入控件
动画效果 使用 enter 和 exit 过渡动画

Dialog 是一个非常灵活的控件,可以满足大多数对话框的需求。通过这些事件和属性,你可以全面监听 Dialog 的生命周期。

事件或属性 说明
onOpened 对话框打开时触发
onClosed 对话框关闭时触发
onVisibleChanged 对话框可见性变化时触发
visible 对话框是否可见
opened 对话框是否打开
Component.onCompleted 对话框创建时触发
Component.onDestruction 对话框销毁时触发

# 4.6.3 ToolTip

在 QML 中,ToolTip 控件用于在用户将鼠标悬停在其他控件上时显示简短的提示信息。下面是一个简单的示例,展示如何在 QML 中使用 ToolTip 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "ToolTip Example"

    Button {
        text: "Hover over me"
        anchors.centerIn: parent

        ToolTip.visible: hovered
        ToolTip.text: "This is a tooltip"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个按钮 Button 控件。当用户将鼠标悬停在按钮上时,将显示一个提示信息。

  • ToolTip.visible: hovered:当按钮被悬停时,显示提示信息。
  • ToolTip.text: "This is a tooltip":设置提示信息的文本内容为 "This is a tooltip"。

通过使用 ToolTip 控件,你可以为用户提供关于控件的简短说明或提示,以帮助他们更好地理解界面上的各个元素。

希望这个示例能帮助你开始使用 ToolTip 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.6.4 Drawer

在 QML 中,Drawer 控件用于创建一个抽屉式的侧边栏或面板,通常用于显示额外的内容或操作选项。下面是一个简单的示例,展示如何在 QML 中使用 Drawer 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "Drawer Example"

    Drawer {
        id: drawer
        width: 200
        height: parent.height
        edge: Qt.LeftEdge

        Rectangle {
            color: "lightblue"
            anchors.fill: parent

            Text {
                text: "Drawer Content"
                anchors.centerIn: parent
            }
        }
    }

    Button {
        text: "Open Drawer"
        onClicked: drawer.open()
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个按钮 Button 控件和一个 Drawer 控件。当用户点击按钮时,抽屉会从左侧滑出显示内容。

  • Drawer 控件的 width 属性设置为 200,表示抽屉的宽度。
  • edge: Qt.LeftEdge:指定抽屉从左侧边缘滑出。
  • 在 Drawer 内部,我们放置了一个带有文本内容的矩形,用于表示抽屉中的内容。

通过使用 Drawer 控件,你可以在应用程序中实现侧边栏或面板,用于显示额外的内容、导航选项或操作按钮,从而提供更丰富的用户体验。

希望这个示例能帮助你开始使用 Drawer 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.6.5 Overlay

在 QML 中,Overlay 控件用于创建一个覆盖在其他内容之上的层,通常用于显示弹出窗口、对话框或其他覆盖式的内容。下面是一个简单的示例,展示如何在 QML 中使用 Overlay 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "Overlay Example"

    Rectangle {
        width: parent.width
        height: parent.height

        Button {
            text: "Open Overlay"
            anchors.centerIn: parent
            onClicked: overlay.visible = true
        }
    }

    Overlay {
        id: overlay
        width: parent.width
        height: parent.height
        visible: false

        Rectangle {
            color: "rgba(0, 0, 0, 0.5)"
            anchors.fill: parent

            Text {
                text: "Overlay Content"
                color: "white"
                font.pixelSize: 20
                anchors.centerIn: parent
            }

            Button {
                text: "Close"
                anchors.bottom: parent.bottom
                anchors.horizontalCenter: parent.horizontalCenter
                onClicked: overlay.visible = false
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个按钮 Button 控件和一个 Overlay 控件。当用户点击按钮时,覆盖层会显示在其他内容之上。

  • Overlay 控件的 visible 属性设置为 false,表示初始时不可见。
  • 在 Overlay 内部,我们放置了一个半透明的矩形作为背景,并在其上显示了文本内容和一个关闭按钮。

通过使用 Overlay 控件,你可以实现在应用程序中显示覆盖式的内容,例如弹出窗口、对话框或其他覆盖层,以增强用户交互和体验。

希望这个示例能帮助你开始使用 Overlay 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.7 标准对话框

# 4.7.1 ColorDialog

在 QML 中,ColorDialog 控件用于创建一个颜色选择对话框,允许用户选择颜色。下面是一个简单的示例,展示如何在 QML 中使用 ColorDialog 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "ColorDialog Example"

    Button {
        text: "Open Color Dialog"
        anchors.centerIn: parent
        onClicked: colorDialog.open()
    }

    ColorDialog {
        id: colorDialog
        onAccepted: {
            console.log("Selected color:", colorDialog.color)
        }
        onRejected: {
            console.log("Color selection canceled")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个按钮 Button 控件。当用户点击按钮时,颜色选择对话框会弹出,允许用户选择颜色。

  • ColorDialog 控件的 onAccepted 信号在用户选择颜色并点击确认时触发,可以在这里处理用户选择的颜色。
  • ColorDialog 控件的 onRejected 信号在用户取消选择颜色时触发,可以在这里处理取消操作。

通过使用 ColorDialog 控件,你可以方便地为用户提供颜色选择功能,使用户能够自定义界面中的颜色。

希望这个示例能帮助你开始使用 ColorDialog 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.7.2 FileDialog

在 QML 中,FileDialog 控件用于创建一个文件对话框,允许用户选择文件或保存文件。下面是一个简单的示例,展示如何在 QML 中使用 FileDialog 控件:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "FileDialog Example"

    Button {
        text: "Open File Dialog"
        anchors.centerIn: parent
        onClicked: fileDialog.open()
    }

    FileDialog {
        id: fileDialog
        title: "Select a file"
        folder: shortcuts.home
        onAccepted: {
            console.log("Selected file:", fileDialog.fileUrls)
        }
        onRejected: {
            console.log("File selection canceled")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个按钮 Button 控件。当用户点击按钮时,文件选择对话框会弹出,允许用户选择文件。

  • FileDialog 控件的 title 属性用于设置对话框的标题。
  • FileDialog 控件的 folder 属性设置默认打开的文件夹位置。
  • FileDialog 控件的 onAccepted 信号在用户选择文件并点击确认时触发,可以在这里处理用户选择的文件。
  • FileDialog 控件的 onRejected 信号在用户取消选择文件时触发,可以在这里处理取消操作。

通过使用 FileDialog 控件,你可以方便地为用户提供文件选择和保存功能,使用户能够在应用程序中操作文件。

希望这个示例能帮助你开始使用 FileDialog 控件。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.7.3 FontDialog

在 QML 中,目前并没有内置的 FontDialog 控件用于选择字体。然而,你可以通过自定义对话框或界面来实现字体选择功能。下面是一个简单的示例,展示如何创建一个简单的字体选择对话框:

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Dialogs 1.3

ApplicationWindow {
    visible: true
    width: 400
    height: 200
    title: "FontDialog Example"

    Button {
        text: "Select Font"
        anchors.centerIn: parent
        onClicked: fontDialog.open()
    }

    Dialog {
        id: fontDialog
        title: "Select a font"
        standardButtons: Dialog.Ok | Dialog.Cancel

        Column {
            FontDialog {
                id: fontPicker
                onAccepted: {
                    console.log("Selected font:", fontPicker.font.family)
                }
            }
        }

        onAccepted: {
            console.log("Font selection confirmed")
        }
        onRejected: {
            console.log("Font selection canceled")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

在这个示例中,我们创建了一个简单的窗口,并在窗口中放置了一个按钮 Button 控件。当用户点击按钮时,自定义的字体选择对话框会弹出,允许用户选择字体。

  • 我们使用 Dialog 控件来创建自定义的对话框,其中包含一个 FontDialog 控件用于选择字体。
  • FontDialog 控件的 onAccepted 信号在用户选择字体并点击确认时触发,可以在这里处理用户选择的字体。
  • Dialog 控件的 onAccepted 信号在用户点击对话框的确认按钮时触发,可以在这里处理确认操作。
  • Dialog 控件的 onRejected 信号在用户点击对话框的取消按钮时触发,可以在这里处理取消操作。

通过自定义对话框和界面,你可以实现字体选择功能,以便用户能够在应用程序中选择所需的字体。

希望这个示例能帮助你实现字体选择功能。如果你有任何问题或需要进一步帮助,请随时告诉我。

# 4.7.4 MessageDialog

# 4.8 自定义组件

组件是可重用的元素,可以包含属性、信号和方法,用于构建用户界面。通过组件,可以将界面分解为更小的部分,使代码更易于维护和重用。

# 4.8.1 组件的定义

在 QML 中,组件可以通过以下两种方式定义:

(1) 使用 Component 定义,Component 是一个轻量级的组件定义方式,通常用于动态创建组件。

Component {
    id: myComponent
    Rectangle {
        width: 100
        height: 100
        color: "lightblue"
        Text {
            text: "Hello"
            anchors.centerIn: parent
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

(2) 使用独立的 QML 文件定义,将组件定义在一个独立的 .qml 文件中,方便复用。文件:MyButton.qml

import QtQuick 2.15

Rectangle {
    id: root
    width: 100
    height: 50
    color: "lightblue"
    radius: 5

    property string text: "Button" // 自定义属性
    signal clicked() // 自定义信号

    Text {
        text: root.text
        anchors.centerIn: parent
    }

    MouseArea {
        anchors.fill: parent
        onClicked: root.clicked() // 触发信号
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 4.8.2 组件的使用

(1) 使用 Component 定义的组件,通过 Loader 或 Repeater 动态加载组件。

import QtQuick 2.15

Item {
    width: 200
    height: 200

    Loader {
        sourceComponent: myComponent // 加载组件
    }
}
1
2
3
4
5
6
7
8
9
10

(2) 使用独立 QML 文件定义的组件,直接引用文件名即可。

import QtQuick 2.15

Item {
    width: 200
    height: 200

    MyButton {
        text: "Click Me"
        onClicked: console.log("Button clicked!")
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 4.8.3 自定义操作

(1) 自定义属性,通过 property 关键字定义组件的属性,外部可以修改这些属性。

Rectangle {
    property string text: "Default Text" // 自定义属性
    Text {
        text: parent.text
    }
}
1
2
3
4
5
6

(2) 自定义信号,通过 signal 关键字定义组件的信号,外部可以连接这些信号。

Rectangle {
    signal clicked() // 自定义信号
    MouseArea {
        anchors.fill: parent
        onClicked: parent.clicked() // 触发信号
    }
}
1
2
3
4
5
6
7

(3) 自定义槽,通过 function 关键字定义组件的槽函数,外部可以调用这些函数。

Rectangle {
    function doSomething() {
        console.log("Doing something...");
    }
}
1
2
3
4
5

# 4.8.4 组件的优势

  1. 复用性:组件可以在多个地方重复使用,减少代码冗余。
  2. 模块化:将复杂 UI 拆分为多个组件,便于维护和扩展。
  3. 灵活性:通过自定义属性和信号,组件可以适应不同的需求。
  4. 可测试性:独立的组件可以单独测试,提高代码质量。

扩展建议

  • 将组件打包为独立的 QML 模块,方便跨项目复用。
  • 使用 Loader 动态加载组件,实现按需加载。
  • 结合 ListView 或 GridView 动态生成多个组件。
上次更新: 2026/06/10, 11:13:41
Qml基础组件
Qml高级功能

← Qml基础组件 Qml高级功能→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式