Qt5开发及实例V2.0-第二十二章-Qt.Quick Controls 2新颖界面开发

490 篇文章 10 订阅
25 篇文章 7 订阅

第22章 Qt Quick Controls 2新颖界面开发

22.1 Qt Quick Controls 2简介

(1)大部分控件的内部状态使用C++而非QML处理,以提高效率。
(2)样式类型不再提供可被控件动态实例化的组件,但控件自身由可被替换的项目委托(item delegates)组成。事实上,这意味着委托(delegates)成为Qt Quick项目,被实例化为控件的属性并与所在控件形成简单的父子关系。
(3)程序模块化和简单化。当需要将多个控件复合成一个控件时,往往将它们分隔进独立的构建代码块中,例如,一个典型的复合滚动条视图控件代码:

ScrollView {
    horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
    Flickable {
        // …
    }
}

它可以通过替换可绑定到任何Flickable的简单ScrollBar/ScrollIndicator控件来合成得到,如下:

Flickable {
    // …
    ScrollBar.vertical: ScrollBar { }
}

Qt Quick Controls 1与2的API特性对比见表22.1(其中,“√”表示支持,数字标注说明见表格下方)
在这里插入图片描述

  1. 无官方公开支持,但技术上可能通过私有API实现。
  2. 只有特殊样式的主题能在运行时改变,而样式是固定不变的。
  3. 性能尚未优化

22.1.1 第一个Qt Quick Controls 2程序

【例】(简单)(CH2201)本章依然从一个简单的程序入手,系统地介绍Qt Quick Controls 2开发的基础知识。创建Qt Quick Controls 2程序,步骤如下。
(1)启动Qt Creator,单击主菜单“文件”→“新建文件或项目…”项,弹出“New File or Project”对话框,选择项目“Application”下的“Qt Quick Controls 2 Application”模板,如图22.1所示。
在这里插入图片描述

(2)单击“Choose…”按钮,在“Qt Quick Controls 2 Application”对话框的“Project Location”页输入项目名称“Qcontrol2Demo”,并选择保存项目的路径,如图22.2所示。
在这里插入图片描述
(3)单击“下一步”按钮,在“Define Project Details”页选择Qt Quick Controls 2样式类型为“Default”,如图22.3所示。
在这里插入图片描述

(4)单击“下一步”按钮,在“Kit Selection”页系统默认已指定程序的编译器和调试器,直接单击“下一步”按钮,如图22.4所示。
在这里插入图片描述

(5)接下来的“Project Management”页自动汇总出要添加到该项目的文件,如图22.5所示。单击“完成”按钮完成Qt Quick Controls 2应用程序的创建。
在这里插入图片描述
单击 运行程序,出现“Hello World”窗口。该窗口包含两个标签页“First”和“Second”,其中“First”页上有一个按钮“Press Me”和一个文本框,在文本框中输入“Hello World”,单击“Press Me”按钮,在开发环境底部“应用程序输出”子窗口显示“Button Pressed. Entered text: Hello World”,如图22.6所示。
在这里插入图片描述

22.1.2 Qt Quick Controls 2程序的构成

上面这个程序是由Qt Creator环境自动生成的,是一个典型的Qt Quick Controls 2应用程序,展开项目视图可以看到其目录结构,如图22.7所示,主要有三个文件:main.qml、Page1.qml和Page1Form.ui.qml。
在这里插入图片描述

1.main.qml
项目启动的主程序文件main.qml,代码。
2.Page1.qml
Page1.qml文件中只有一个Page1Form元素,它是项目默认Page1页面的主窗体元素,一般用来存放Page1页上各控件的事件处理代码,在本项目中是“Press Me”按钮的单击(onClicked)事件代码,如下:

import QtQuick 2.7
Page1Form {
    button1.onClicked: {
        console.log("Button Pressed. Entered text: " + textField1.text);
    }
}

3.Page1Form.ui.qml
Page1Form.ui.qml是默认Page1页的主窗体实现文件,代码如下:

import QtQuick 2.7
import QtQuick.Controls 2.0			//导入Qt Quick Controls 2.0库
import QtQuick.Layouts 1.0			//导入Qt Quick布局库
 
Item {					//QML通用的根元素
	/* 定义属性别名,为在其他.qml文件中引用这2个控件 */
    property alias textField1: textField1
    property alias button1: button1
 
    RowLayout {					//水平布局
        anchors.horizontalCenter: parent.horizontalCenter
						//在页面上居中
        anchors.topMargin: 20				//距顶部20像素
        anchors.top: parent.top				//顶端对齐
 
        TextField {					//文本框控件
            id: textField1
            placeholderText: qsTr("Text Field")
        }
 
        Button {					//按钮控件
            id: button1
            text: qsTr("Press Me")
        }
    }
}

4.界面主题样式
Qt Quick Controls 2支持三种类型的界面主题样式:Default(默认)、Material(质感)和普通(Universal),之前创建项目工程时选择的是默认样式(图22.3),可通过修改项目的qtquickcontrols2文件配置来更换样式类型。
qtquickcontrols2 .conf文件内容如下:

;This file can be edited to change the style of the application
;See Styling Qt Quick Controls 2 in the documentation for details:
;http://doc.qt.io/qt-5/qtquickcontrols2-styles.html
 
[Controls]
Style=Default
 
[Universal]
Theme=Light
;Accent=Steel
 
[Material]
Theme=Light
;Accent=BlueGrey
;Primary=BlueGray

其中,加黑处即需要修改配置的地方。将其改为Material,运行程序,看到质感的界面如图22.8所示;若改为Universal,则呈现的界面如图22.9所示。
在这里插入图片描述

22.2 Qt Quick Controls 2与1的比较

22.2.1 ApplicationWindow结构不同

在Qt Quick Controls 1中,主应用窗口ApplicationWindow由菜单栏(Menu Bar)、工具栏(Tool Bar)、内容显示区(Content Area)和底部状态栏(Status Bar)等构成,而Qt Quick Controls 2的主应用窗口结构则要简单得多,它仅由头部(Header)、内容(Content)和尾部(Footer)三部分组成,两者的区别如图22.10所示。
在这里插入图片描述
在Qt Quick Controls 2中,一般声明ApplicationWindow为整个应用的根元素,其最简单的代码形式如下:

import QtQuick.Controls 2.1
ApplicationWindow {
    visible: true
    header: ToolBar {
        // ...
    }
    footer: TabBar {
        // ...
    }
    SwipeView {
        anchors.fill: parent
        // ...
    }
}

1.ToolBar工具栏
【例】(简单)(CH2201-a1)工具栏。
ToolBar是应用广泛的上下文相关控件(如导航按钮、搜索框等)的容器,其典型代码。
运行效果如图22.11所示。
在这里插入图片描述
2.TabBar选项标签栏
【例】(简单)(CH2201-a2)标签栏。
Qt Quick Controls 2使用TabBar/TabButton控件组合来实现页面选项标签栏,以取代原Qt Quick Controls 1中TabView/Tab组合的功能。代码的形式如下:

TabBar {
	// ...
    width: parent.width
    TabButton {
        text: "FirstTab"
		// ...
    }
    TabButton {
        text: "SecondTab"
		// ...
    }
    TabButton {
        text: "ThirdTab"
		// ...
    }
}

一旦所有选项标签的宽度和加起来超过了屏幕宽度,标签栏就会自适应调整为可滑动切换状态,代码如下。

ApplicationWindow {
    visible: true
    width: 240
    height: 480
    title: qsTr("标签栏")
 
    header: TabBar {
        id: bar
        width: parent.width
 
        Repeater {
            model: ["第一页", "第二页", "第三页", "第四页", "第五页"]
 
            TabButton {
                text: modelData
                width: Math.max(100, bar.width / 5)
            }
        }
    }
}

运行效果如图22.12所示。
在这里插入图片描述

22.2.2 Menu不支持窗口主菜单

【例】(简单)(CH2201-a1续)一个典型的工具栏弹出式菜单的例子。
代码如下。
运行程序,单击工具栏上右侧的 按钮,弹出菜单如图22.13所示。
在这里插入图片描述

22.2.3 控件实现差异

1.ButtonGroup取代ExclusiveGroup组框
在原Qt Quick Controls 1中,成组的选项按钮由ExclusiveGroup组织在一起,例如21.2.2“学生信息表单”实例(实例文件CH2102)中,有如下代码:

GroupBox {				/* 组框 */
    id: group1
    title: qsTr("性别")
    Layout.fillWidth: true
    RowLayout {				
        ExclusiveGroup { id: sexGroup }	/* 互斥选项组*/
        RadioButton {			/* 单选按钮 */
            text: qsTr("男")
            checked: true
            exclusiveGroup: sexGroup
            Layout.minimumWidth: 65		//设置控件所占最小宽度为65
        }
        RadioButton {
            text: qsTr("女")
            exclusiveGroup: sexGroup
            Layout.minimumWidth: 65
        }
    }
}

这段代码实现了“性别”单选按钮组,而在Qt Quick Controls 2中,单选按钮组改由ButtonGroup组织,如下:

GroupBox {				/* 组框 */
    id: group1
    title: qsTr("性别")
    Layout.fillWidth: true
    RowLayout {				
        ButtonGroup { id: sexGroup }		/* 互斥选项组*/
        RadioButton {			/* 单选按钮 */
            text: qsTr("男")
            checked: true
            ButtonGroup.group: sexGroup
            Layout.minimumWidth: 65		//设置控件所占最小宽度为65
        }
        RadioButton {
            text: qsTr("女")
            ButtonGroup.group: sexGroup
            Layout.minimumWidth: 65
        }
    }
}

2.TextArea滚动条实现方式不一样
在Qt Quick Controls 1中,TextArea组件继承自ScrollView,因此始终自带滚动条;而在Qt Quick Controls 2中,TextArea只是个简单的多行文本编辑器,可选择性地绑定到滑动页组件以提供滚动条功能。这样就可以在带滚动条的页面上使用TextArea而不会出现双重滚动区域嵌套的情形,从而避免了不确定性和由此带来的可用性问题。将TextArea绑定到一个滑动页组件的典型代码如下:

Flickable {
    id: flickable
    anchors.fill: parent
 
    TextArea.flickable: TextArea {
        text: "TextArea\n...\n...\n...\n...\n...\n...\n"
        wrapMode: TextArea.Wrap
    }
 
    ScrollBar.vertical: ScrollBar { }
}

3.新增Tumbler翻选框控件
【例】(简单)(CH2201-a3)翻选框控件使用。
实现步骤如下。
(1)新建Qt Quick Controls 2应用程序,项目名称为“TumblerDialog”。
(2)打开main.qml文件,修改代码如下:
程序运行效果如图22.14所示。
在这里插入图片描述

4.一些界面控件显示风格的差异
【例】(简单)(CH2201-a4)部分控件对比显示效果。
创建一个Qt Quick Controls 2应用程序,打开main.qml文件,编写代码如下:
运行程序,效果如图22.15所示。
在这里插入图片描述

22.3 滑动翻页及隐藏面板

【例】(难度中等)(CH2202)制作一个艺术品欣赏程序,采用多页面,每一页显示一幅艺术品图片,以及品名、作者、创作年代信息,单击界面下方的滑动点来切换页面,如图22.16所示。
在这里插入图片描述

每件艺术品还附带有详细的介绍信息,在界面右侧的隐藏面板内,用户可随时拉出来查看,运行效果如图22.17所示。
在这里插入图片描述

实现步骤如下。
(1)新建Qt Quick Controls 2应用程序,项目名称为“ArtView”。
(2)在项目工程目录中建一个images文件夹,其中放入本例要用到的三张图片,文件名为“蒙娜丽莎.jpg”、“大卫.jpg”、“圣母.jpg”。
(3)右击项目视图“资源”→“qml.qrc”下的“/”节点,选择“添加现有文件…”项,从弹出对话框中选择这些图片打开,将它们加载到项目中。
(4)双击项目视图打开Page1Form.ui.qml文件,编写代码。
(5)打开Page1.qml文件,编写代码。
(6)打开main.qml文件,修改代码。

22.4 选项列表

【例】(难度中等)(CH2203)实现一个图书选择浏览程序,采用选项列表的形式,界面左边是所有书名的列表,用户选中的项以淡灰色背景突出显示,同时在右边图片框中显示对应该书的封面图片,运行效果如图22.18所示。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls 2应用程序,项目名称为“BookView”。
(2)在项目工程目录中建一个images文件夹,其中放入本例要用到的所有图书的封面图片。
(3)右击项目视图“资源”→“qml.qrc”下的“/”节点,选择“添加现有文件…”项,从弹出对话框中选择这些图片打开,将它们加载到项目中。
(4)双击项目视图打开Page1Form.ui.qml文件,将原有界面上的默认控件元素的代码注释掉:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
 
Item {
    /*
	...
    */
}

(5)打开Page1.qml文件,将其中button1.onClicked事件处理代码注释掉:

import QtQuick 2.7
Page1Form {
    /*
	...
    */
}

(6)打开main.qml文件,修改代码。

22.5 带功能按钮的列表

【例】(较难)(CH2204)实现一个购书程序,依然采用选项列表的形式,但在列表的每个书目上增加“购买”和“移除”两个按钮,初始时两按钮均隐藏不可见,向左滑动条目才能呈现出来,单击“购买”按钮,在列表下方图片框中加载所购书的封面图片,单击“移除”按钮,则删除该书目,如图22.19所示。
在这里插入图片描述
单击封面图片右边的“结账”按钮,弹出组框供用户选择付款方式,运行效果如图22.20所示。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls 2应用程序,项目名称为“BookBuy”。
(2)在项目工程目录中建一个images文件夹,其中放入本例要用到的所有图书的封面图片。
(3)右击项目视图“资源”→“qml.qrc”下的“/”节点,选择“添加现有文件…”项,从弹出对话框中选择这些图片打开,将它们加载到项目中。
(4)分别打开项目中的Page1Form.ui.qml和Page1.qml文件,将原有的一部分默认代码注释掉(注释的方式同前例CH2203),从略。
(5)打开main.qml文件,修改代码。



本章相关例程源码下载

1.Qt5开发及实例_CH2201.rar 下载

Qt5开发及实例_CH2201.rar

2.Qt5开发及实例_CH2201-a1.rar 下载

Qt5开发及实例_CH2201-a1.rar

3.Qt5开发及实例_CH2201-a2.rar 下载

Qt5开发及实例_CH2201-a2.rar

4.Qt5开发及实例_CH2201-a3.rar 下载

Qt5开发及实例_CH2201-a3.rar

5.Qt5开发及实例_CH2201-a4.rar 下载

Qt5开发及实例_CH2201-a4.rar

6.Qt5开发及实例_CH2202.rar 下载

Qt5开发及实例_CH2202.rar

7.Qt5开发及实例_CH2203.rar 下载

Qt5开发及实例_CH2203.rar

8.Qt5开发及实例_CH2204.rar 下载

Qt5开发及实例_CH2204.rar

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 《QtQtQuick开发实战精解(第2版)》是一本介绍QtQtQuick开发实践的书籍。Qt是一个跨平台的C++应用程序开发框架,而QtQuick则是一种基于QML语言的快速用户界面设计技术。 本书从实战的角度出发,通过一系列的实例演示和详细的代码解析,介绍了QtQtQuick的基本概念、开发工具和常用技术。首先,书中介绍了QtQtQuick的基础知识,包括窗口、布局、信号与槽等内容,帮助读者快速上手。 随后,本书通过实际案例的讲解,涵盖了QtQtQuick在图形界面、多线程编程、网络通信、数据库操作、音视频处理等方面的应用。例如,在图形界面方面,书中演示了如何使用QtQtQuick来创建各种常见控件、自定义样式,以及界面间的导航和数据传递。在多线程编程方面,本书详细介绍了Qt提供的多线程支持,并提供了一些常见的多线程编程实例。 此外,本书还介绍了一些高级技术,如OpenGL的集成、Canvas的使用、跨平台开发等。通过这些实例,读者可以更全面地了解和应用QtQtQuick的各种功能和技巧。 总的来说,《QtQtQuick开发实战精解(第2版)》是一本很实用的QtQtQuick开发指南。无论是刚开始学习QtQtQuick的初学者,还是有一定开发经验的开发者,都可以从中学到很多实用的知识和技巧,帮助他们更高效地进行应用程序开发。 ### 回答2: 《QtQt Quick开发实战精解(第2版)》是一本关于QtQt Quick开发的实战指南。本书作者通过丰富的实例和详细的讲解,向读者介绍了QtQt Quick的基本概念、使用方法和开发技巧。 首先,本书系统地介绍了Qt的基本组件和框架,包括窗口、布局、绘图和事件处理等方面的内容。读者可以通过学习这些知识,了解Qt的基本用法,从而能够快速开发出功能丰富、界面友好的应用程序。 其次,本书详细介绍了Qt Quick的使用方法。Qt Quick是一种用于开发跨平台用户界面的技术,它通过QML语言Qt Quick Controls组件库,可以快速而灵活地创建现代化的用户界面。作者通过实例和演示,帮助读者掌握QML的语法和用法,以及Qt Quick Controls的各种功能和特性。 此外,本书还介绍了Qt在嵌入式开发和移动开发方面的应用。作者通过讲解如何使用QtQt Quick开发嵌入式设备和移动应用程序,帮助读者更好地了解Qt在不同平台上的特点和优势。 综上所述,《QtQt Quick开发实战精解(第2版)》是一本非常实用的开发指南。无论是初学者还是有一定经验的开发者,都可以通过本书获得深入和全面的QtQt Quick开发知识。无论是桌面应用程序、移动应用程序还是嵌入式设备,Qt都提供了灵活和强大的开发工具和框架,本书将帮助读者充分发挥Qt的优势,开发出高效、稳定的应用程序。 ### 回答3: 《QtQt Quick开发实战精解》(第2版)是一本深入介绍QtQt Quick开发的实战指南。本书通过丰富的实例和详细的讲解,帮助读者系统掌握QtQt Quick开发技巧。 首先,本书介绍了QtQt Quick的基础知识。它详细解释了Qt的编程模型,包括对象模型、信号槽机制和事件处理。此外,书中还介绍了Qt Quick的基本概念,如声明式语言QML和Qt Quick控件的使用方法。 然后,本书通过实例介绍了QtQt Quick的常用功能和技术。它涵盖了图形界面设计、窗口和布局管理、多线程编程、网络通信和数据库操作等方面。通过这些实例,读者将学会如何开发具有实际功能的应用程序。 此外,本书还介绍了QtQt Quick的高级技术和扩展。它深入探讨了Qt的模型视图框架、OpenGL绘图和多媒体处理等内容。它还介绍了如何使用Qt Creator进行开发和调试,以及如何利用Qt框架开发跨平台应用程序。 总的来说,《QtQt Quick开发实战精解》(第2版)是一本全面系统的Qt开发指南。通过学习本书,读者将掌握QtQt Quick开发技巧,并能够运用它们开发高效、可靠的应用程序。无论是初学者还是有一定经验的开发者,都可以从本书中获得实用的知识和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华为奋斗者精神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值