Qt5开发及实例V2.0-第二十一章-Qt.Quick Controls开发基础

Qt5开发及实例V2.0-第二十一章-Qt.Quick Controls开发基础

  • 第21章 Qt Quick Controls开发基础
    • 21.1 Qt Quick Controls概述
      • 21.1.1 第一个Qt Quick Controls程序
      • 21.1.2 Qt Quick窗体应用程序的构成
    • 21.2 Qt Quick控件
      • 21.2.1 概述
      • 21.2.2 基本控件
      • 21.2.3 高级控件
      • 21.2.4 样式定制
    • 21.3 Qt Quick对话框
    • 21.4 Qt Quick导航视图
    • 21.5 Qt 5.5(Qt Quick Controls 1.4)新增组件
  • 本章相关例程源码下载
    • 1.Qt5开发及实例_CH2101.rar 下载
    • 2.Qt5开发及实例_CH2102.rar 下载
    • 3.Qt5开发及实例_CH2103.rar 下载
    • 4.Qt5开发及实例_CH2104.rar 下载
    • 5.Qt5开发及实例_CH2105.rar 下载
    • 6.Qt5开发及实例_CH2106.rar 下载
    • 7.Qt5开发及实例_CH2107.rar 下载
    • 8.Qt5开发及实例_CH2108.rar 下载

第21章 Qt Quick Controls开发基础

21.1 Qt Quick Controls概述

21.1.1 第一个Qt Quick Controls程序

【例】(简单)(CH2101)本章还是从一个简单的程序入手,系统地介绍Qt Quick Controls开发的基础知识。创建Qt Quick Controls程序,步骤如下。
(1)启动Qt Creator,单击主菜单“文件”→“新建文件或项目…”项,弹出“新建项目”对话框,选择项目“Application”下的“Qt Quick Controls Application”模板,如图21.1所示。
在这里插入图片描述
(2)单击“Choose…”按钮,在“Qt Quick Controls Application”对话框的“Project Location”页输入项目名称“QControlDemo”,并选择保存项目的路径。
(3)单击“下一步”按钮,在“Define Project Details”页选择“Qt 5.7”,如图21.2所示。
在这里插入图片描述
(4)单击“下一步”按钮,在“Kit Selection”页系统默认已指定程序的编译器和调试器,直接单击“下一步”按钮,接下来的“项目管理”页自动汇总出要添加到该项目的文件,单击“完成”按钮完成Qt Quick Controls应用程序的创建。
单击 运行程序,出现“Hello World”窗口。该窗口包含一个“File”主菜单,界面上有2个按钮:“Press Me 1”和“Press Me 2”,单击“File”菜单下的“Open”子菜单项以及2个按钮,分别弹出不同的对话框或输出提示信息,如图21.3所示。
在这里插入图片描述

21.1.2 Qt Quick窗体应用程序的构成

上面这个程序是由Qt Creator环境自动生成的,是一个典型的Qt Quick窗体应用程序,展开项目视图可以看到其目录结构与普通QML程序一样,主要有两个文件:main.qml和MainForm.ui.qml。
其中,项目启动的主程序文件为main.qml,其代码。

1.ApplicationWindow(主应用窗口)
ApplicationWindow是整个QML文档的根元素,它定义了应用程序顶层的主窗口,而程序中其他组件一律作为其子元素来定义。完整桌面程序的主窗口包含了菜单栏(Menu Bar)、工具栏(Tool Bar)、内容显示区(Content Area)和底部状态栏(Status Bar)等UI组件,标准ApplicationWindow布局如图21.4所示。
在这里插入图片描述

2.组件类属性
组件类属性是一类特殊的属性,它们由ApplicationWindow本身提供,其用途是添加主应用窗口附属的UI元素,类似于子元素的功能。ApplicationWindow自带的组件类属性有:menuBar(菜单栏)、toolBar(工具栏)、statusBar(状态栏)和style(样式组件)。
3.MainForm(主窗体)
主窗体是用户界面的主显示区,对应图21.4中的Content Area区域,用于接收用户输入操作和显示程序运行的数据(视图)。主窗体以MainForm元素实现,就像一个大容器,其中放置了各种各样的控件,它的实现文件是MainForm.ui.qml。本例的代码。

4.其他组件
在ApplicationWindow中还可以定义其他独立的组件元素,主要有标准对话框、消息框和各种视图等。在本例中是一个MessageDialog(消息对话框),它根据用户所操作的控件不同分别弹出显示不一样的消息内容。
5.完整界面的代码框架
为了给读者一个整体印象,下面列出一个较为全面的ApplicationWindow代码框架。

21.2 Qt Quick控件

21.2.1 概述

Qt Quick Controls模块提供一个控件的集合供用户开发图形化界面使用,自Qt Quick 2.1(Qt 5.1)起,还引入了一个Qt Quick Controls Styles子模块,它几乎为每个Qt Quick控件都提供了一个对应的样式类,以Style(其中“”是原控件的类名)命名,允许用户自定义Qt Quick控件的样式。所有的Qt Quick控件、对应样式类、可视外观效果和功能描述见表21.1。

21.2.2 基本控件

【例】(难度中等)(CH2102)用基本控件制作“学生信息表单”,输入(选择)学生各项信息后单击“提交”按钮,在文本区显示出该生的信息,运行效果如图21.5所示。
在这里插入图片描述

实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“StuForm”。
(2)双击项目视图打开MainForm.ui.qml文件,编写代码。
(3)打开main.qml文件,修改代码。

21.2.3 高级控件

【例】(较难)(CH2103)用高级控件制作一个有趣的小程序,界面如图21.6所示。
在这里插入图片描述
程序运行后,窗体上显出一幅唯美的海底美人鱼图画。用户可用鼠标拖动左下方滑块来调整画面尺寸,当画面缩小到一定程度后,界面上会出现一个“忙等待”的动画符号;画面可在彩色/黑白间任意切换,也可单击“灰度值>>”按钮调节灰度,每单击一次,色彩就变灰一些,并以进度条指示灰度;还可设置美人鱼的年龄,日历同步选择她的生日。运行效果如图21.7所示。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“Mermaid”。
(2)在项目工程目录中建一个images文件夹,其中放入一张图片,文件名“Mermaid.jpg”。
(3)右击项目视图“资源”→“qml.qrc”下的“/”节点,选择“添加现有文件…”项,从弹出对话框中选择该图片打开,将其加载到项目中。
(4)打开MainForm.ui.qml文件,编写代码。
(5)打开main.qml文件,修改代码。

21.2.4 样式定制

定制控件的样式有以下两种方法。
(1)使用样式属性。
所有可定制的Qt Quick控件都有一个style属性,将其值设为该控件对应的样式类,然后在样式类中定义样式,代码如下:

Control {									//控件名...										//其他属性及值style: ControlStyle {							//样式属性...								//自定义样式的代码}...
}

(2)定义样式代理。
样式代理是一种由用户定义的属性类组件,其代码如下:

property Component delegateName: ControlStyle {	//样式代理...										//自定义样式的代码
}

其中,delegateName为样式代理的名称,经这样定义了之后,就可以在控件代码中直接引用该名称来指定控件的样式,如下:

Control {					//控件名...style: delegateName			//通过样式代理名指定样式...
}

这种方法的好处:如果有多个控件具有相同的样式,那么只需在样式代理中定义一次,就可以在各个需要该样式的控件中直接引用,提高了代码的复用性。

【例】(较难)(CH2104)用上述两种方法分别定制几种控件的样式,界面对比如图21.8所示,其中左边一列为控件的标准外观,中间为用样式属性直接定义的外观,右边则是应用了样式代理后的效果。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“Styles”。
(2)在项目工程目录中建一个images文件夹,其中放入一些图片作为定制控件的资源,如图21.9所示。
在这里插入图片描述
(3)右击项目视图“资源”→“qml.qrc”下的“/”节点,选择“添加现有文件…”项,从弹出对话框中选中这些图片打开,将它们加载到项目中。
(4)打开MainForm.ui.qml文件,编写代码。
(5)打开main.qml文件,修改代码如下:

...
ApplicationWindow {title: qsTr("样式定制")width: 600height: 240visible: trueMainForm {anchors.fill: parent}
}

21.3 Qt Quick对话框

【例】(难度中等)(CH2105)演示几种Qt Quick对话框的用法,运行效果如图21.10所示。
在这里插入图片描述

实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“Dialogs”。
(2)打开MainForm.ui.qml文件,编写代码。
(3)打开main.qml文件,修改代码。

其中,
(a) Dialog {…}:这是自Qt 5.3才引入的类型,是Qt Quick提供给用户自定义的通用对话框组件。它包含一组为特定平台定制的标准按钮且允许用户往对话窗体中放置任何内容,其默认属性contentItem是用户放置的元素(其中还可包含多层子元素),对话框会自动调整大小以适应这些内容元素和标准按钮,例如:

Dialog {…contentItem: Rectangle {color: "lightskyblue"implicitWidth: 400implicitHeight: 100Text {text: "你好,蓝天!"color: "navy"anchors.centerIn: parent}}
}

(b) standardButtons: StandardButton.Save | StandardButton.Cancel:对话框底部有一组标准按钮,每个按钮都有一个特定“角色”决定了它被按下时将发出何种信号。用户可通过设置standardButtons属性为一些常量位标志的逻辑组合来控制所要使用的按钮。这些预定义常量及对应的标准按钮、按钮角色见表21.2。
在这里插入图片描述
© onAccepted: …:onAccepted定义了对话框在接收到accepted()信号时要执行的代码,accepted()信号是当用户按下具有Accept角色的标准按钮(如【OK】、【Open】、【Save】、【Save All】、【Retry】或【Ignore】)时所发出的信号。
(d) nameFilters: […]:文件名过滤器。它由一系列字符串组成,每个字符串可以是一个由空格分隔的过滤器列表,过滤器可包含“?”和“”通配符。过滤器列表可用“[ ]”括起来,并附带对每种过滤器提供一个文字描述。例如本例定义的过滤器列表:
[ "Text files (
.txt)", “Image files (*.jpg .png)", "All files ()” ]
所对应的界面外观为:
在这里插入图片描述

(e) main.file.text = fileDialog.fileUrl:其中fileUrl是用户所选择文件的路径,该属性只能储存一个特定文件的路径。
(f) modality: Qt.WindowModal:设定该对话框为模式对话框。所谓“模式对话框”是指在得到事件响应之前,阻止用户切换到其他窗体的对话框。

21.4 Qt Quick导航视图

【例】(较难)(CH2106)用多种导航视图组合,展示“文艺复兴三杰”的代表作,界面如图21.11所示。
在这里插入图片描述

三块区域间有分隔条,用鼠标水平拖动可改变各区所占比的宽度。用户可以用两种方式更改视图以欣赏不同作者的作品:一种是选择左边不同的列表项;另一种是切换中间相框顶部的选项页,操作如图21.12所示。无论采取哪种方式,三个区域的视图都会同步变化。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“View”。
(2)在项目工程目录中建一个images文件夹,其中放入三张图片作为本项目的资源,如图21.13所示。
在这里插入图片描述

(3)右击项目视图“资源”→“qml.qrc”下的“/”节点,选择“添加现有文件…”项,从弹出对话框中选中这些图片打开,将它们加载到项目中。
(4)打开MainForm.ui.qml文件,编写代码。
其中,
(a) SplitView {…}:SplitView视图用于以分隔条的方式横向或纵向布局元素,orientation属性设置布局方向。本例设为Qt.Horizontal是横向布局(Qt.Vertical为纵向),效果如图21.14所示。
在这里插入图片描述
(b) TableViewColumn {…}:TableViewColumn元素代表TableView视图中的“列”,它提供了一些属性来决定列中的数据将如何显示。
© model: libraryModel:TableView视图中每一行的数据由ListModel元素提供,model属性指定了负责提供数据的ListModel对象。
(d) ScrollView {…}:顾名思义,ScrollView视图提供一个带水平和垂直滚动条(效果与平台相关)的内容框架为用户显示比较大的界面元素(如图片、网页等)。

(5)打开main.qml文件,修改代码。
其中,
(a) tabView.currentIndex = tableView.currentRow;:currentIndex为TabView视图当前Tab选项页的索引,currentRow为TableView视图当前被选中行的索引(默认-1表示没有行被选),两者索引序号都从0开始递增,这条赋值语句使两个视图的当前索引同步,从而保证了在选择列表项时自动切换到相应的选项页。
(b) scrolimg.source = “images/” + tabView.getTab(tabView.currentIndex).title + “.jpg”;:此句为保证ScrollView视图所显示的图像与前两个视图同步。

© tableView.selection:selection属性包含了TableView视图当前的“行选择”状态,它允许用户任意地选择、取消选择或遍历已选中的行,这些操作都由预定义的函数实现,各函数功能详见表21.3。
在这里插入图片描述

21.5 Qt 5.5(Qt Quick Controls 1.4)新增组件

【例】(难度一般)(CH2107)用CircularGauge实现汽车时速表,按【Space(空格)】键模拟踩油门加速,界面如图21.15所示。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“CircularGauge”。
(2)打开main.qml文件,修改代码。

【例】(简单)(CH2108)用Gauge实现温度计,单击“升温”、“降温”按钮实现温度读数的升降,界面如图21.16所示。
在这里插入图片描述
实现步骤如下。
(1)新建Qt Quick Controls应用程序,项目名称为“Gauge”。
(2)打开MainForm.ui.qml文件,编写代码。
(3)打开main.qml文件,修改代码如下:

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2ApplicationWindow {				//主应用窗口visible: truewidth: 320height: 270title: qsTr("温度计")MainForm {anchors.fill: parentbutton1.onClicked: thermometer.value += 5	//温度增加button2.onClicked: thermometer.value -= 5	//温度降低}
}


本章相关例程源码下载

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

Qt5开发及实例_CH2101.rar

2.Qt5开发及实例_CH2102.rar 下载

Qt5开发及实例_CH2102.rar

3.Qt5开发及实例_CH2103.rar 下载

Qt5开发及实例_CH2103.rar

4.Qt5开发及实例_CH2104.rar 下载

Qt5开发及实例_CH2104.rar

5.Qt5开发及实例_CH2105.rar 下载

Qt5开发及实例_CH2105.rar

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

Qt5开发及实例_CH2106.rar

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

Qt5开发及实例_CH2107.rar

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

Qt5开发及实例_CH2108.rar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/140111.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MUSIC算法的二维超声波成像matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、基本原理 4.2、数学公式 4.3、实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................................…

比特币的蒙提霍尔问题

把钱放在嘴边 我们在比特币上建立了蒙提霍尔问题模拟。 如果您知道概率谜题的正确答案,不仅炫耀您的数学技能,还会获得金钱奖励。 它完全无需信任地在链上运行。 蒙提霍尔问题 蒙提霍尔问题(三门问题)是一个以蒙提霍尔命名的概率…

力扣-234.回文链表

Idea 用一个数组或者字符串将链表中的值依次存入,然后利用数组遍历方法比较双端元素 AC Code class Solution { public:bool isPalindrome(ListNode* head) {string s "";ListNode* p head;while(p ! nullptr){s.append(to_string(p->val));p p-&g…

SQL 如何提取多级分类目录

前言 POI数据处理,原始数据为csv格式,整理入库至PostGreSQL,本例使用PostGreSQL13版本。 一、POI POI(一般作为Point of Interest的缩写,也有Point of Information的说法),通常称作兴趣点&am…

程序运行时增加语音提示

目录 前言 一、认识SAPI 二、使用方法 三、测试效果​编辑 总结 前言 在测试过程中为了更高效的提示操作者,在程序执行时增加语音提醒会方便很多,利用微软的SAPI可以很方便的在程序有问题时提示操作者。 一、认识SAPI SpVoice类是支持语音合成(TTS)的核…

ARP协议-介于数据链路层和网络层之间的协议

通过上一篇 IP协议 我们知道 目标IP目标网络 目标主机 🙋‍ 也就是说 必须知道 接收方的接收方的 MAC地址 > 没有MAC地址无法封装 MAC帧 在网络层,我们可以知道目标主机的 IP 地址, 但是 我们不知道对方的MAC地址 。 在同一个网段&…

Tessy 5.0.4

Tessy 5.0.4 Linux 2692407267qq.com,更多内容请见http://user.qzone.qq.com/2692407267/

【Vue+Element-UI】实现登陆注册界面及axios之get、post请求登录功能实现、跨域问题的解决

目录 一、实现登陆注册界面 1、前期准备 2、登录静态页实现 2.1、创建Vue组件 2.2、静态页面实现 2.3、配置路由 2.4、更改App.vue样式 2.5、效果 3、注册静态页实现 3.1、静态页面实现 3.2、配置路由 3.3、效果 二、axios 1、前期准备 1.1、准备项目 1.2、安装…

H.264编码

1.为什么要对视频进行编码 视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像,由于人眼的视觉暂留效应,当帧序列以一定的速率播放时,我们看到的就是动作连续的视频,这么多连续的图像数据如果不经过编码…

正则表达式:整数

正则表达式:整数 校验字符串,为有效的整数。 校验规则 只能为:整数(包括:正整数、负整数、零) 不能为:非数值型的字符串 不能为:小数 不能为:一连串的0(比…

算法通关村第16关【青铜】| 滑动窗口思想

1. 滑动窗口的基本思想 一句话概括就是两个快慢指针维护的一个会移动的区间 固定大小窗口:求哪个窗口元素最大、最小、平均值、和最大、和最小 可变大小窗口:求一个序列里最大、最小窗口是什么 2. 两个入门题 (1)子数组最大平…

使用 Elasticsearch、OpenAI 和 LangChain 进行语义搜索

在本教程中,我将引导您使用 Elasticsearch、OpenAI、LangChain 和 FastAPI 构建语义搜索服务。 LangChain 是这个领域的新酷孩子。 它是一个旨在帮助你与大型语言模型 (LLM) 交互的库。 LangChain 简化了与 LLMs 相关的许多日常任务,例如从文档中提取文本…

vue3 - Element Plus暗黑模式适配、切换及自定义颜色

GitHub Demo 地址 在线预览 Element Plus 2.2.0 版本开始支持暗黑模式,启用方式参考 Element Plus 官方文档 - 暗黑模式 demo通过Element Plus和VueUse 的 useDark 方法实现具有自动数据持久性的响应式暗黑模式。 安装 npm install element-plus --save npm in…

一个关于 i++ 和 ++i 的面试题打趴了所有人

前言 都说大城市现在不好找工作,可小城市却也不好招人。 我们公司招了挺久都没招到,主管感到有些心累。 我提了点建议,是不是面试问的太深了,在这种小城市,能干活就行。 他说自己问的面试题都很浅显,如果答…

HUAWEI华为荣耀猎人游戏本V700 i7独显2060(FRD-WFD9)原装出厂Windows10系统工厂模式(含F10还原)

华为HONOR荣耀笔记本原厂系统镜像包,安装恢复时自动创建F10一键智能还原功能 链接:https://pan.baidu.com/s/1_px_3Fr9qEE6jExz1eKKKg?pwdk6uc 提取码:k6uc 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序…

ChatGLM GPT原理介绍

图解GPT 除了BERT以外,另一个预训练模型GPT也给NLP领域带来了不少轰动,本节也对GPT做一个详细的讲解。 OpenAI提出的GPT-2模型(https://openai.com/blog/better-language-models/) 能够写出连贯并且高质量的文章,比之前语言模型效果好很多。GPT-2是基于Transformer搭建的,相…

SQL Server数据库中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

随着互联网的发展,网络安全问题日益凸显,勒索病毒已经成为当今数字威胁中的一大主要犯罪行为之一。其中,360后缀勒索病毒作为一种常见的数据库攻击形式,对数据库的安全性提出了极大挑战。近期我们收到很多企业的求助,企…

QT:使用行编辑器、文本编辑器、单选按钮、水平布局、垂直布局做一个小项目

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QLineEdit> //行编辑器 #include <QTextEdit> //文本编辑器 #include <QRadioButton> //单选按钮class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *pare…

项目进度网络图

概念 项目网络图是项目所有活动及其之间逻辑关系&#xff08;依赖关系&#xff09;的一个图解表示&#xff0c;并从左到右来表示项目的时间顺序。 可手工编制也可用计算机实现。可包括整个项目的全部细节&#xff0c;也可包含一个或多个概括性活动&#xff0c;还相应伴有一个…

uniapp中vue3使用uni.createSelectorQuery().in(this)报错

因为VUE3中使用setup没有this作用域&#xff0c;所以报错 解决办法&#xff1a;使用getCurrentInstance()方法获取组件实例 import { getCurrentInstance } from vue;const instance getCurrentInstance(); // 获取组件实例 const DOMArr uni.createSelectorQuery().in(ins…