Qt6开发与实例(第6版)PPT课件(全).pptx

上传人:聆听****声音 文档编号:199586 上传时间:2023-04-28 格式:PPTX 页数:409 大小:4.76MB
下载 相关 举报
Qt6开发与实例(第6版)PPT课件(全).pptx_第1页
第1页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第2页
第2页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第3页
第3页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第4页
第4页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第5页
第5页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第6页
第6页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第7页
第7页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第8页
第8页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第9页
第9页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第10页
第10页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第11页
第11页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第12页
第12页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第13页
第13页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第14页
第14页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第15页
第15页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第16页
第16页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第17页
第17页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第18页
第18页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第19页
第19页 / 共409页
Qt6开发与实例(第6版)PPT课件(全).pptx_第20页
第20页 / 共409页
亲,该文档总共409页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Qt6开发与实例(第6版)PPT课件(全).pptx

《Qt6开发与实例(第6版)PPT课件(全).pptx》由会员分享,可在线阅读,更多相关《Qt6开发与实例(第6版)PPT课件(全).pptx(409页珍藏版)》请在冰点文库上搜索。

Qt6开发与实例(第6版)PPT课件(全).pptx

第1章Qt概述,Qt6开发及实例(第5版),什么是Qt,什么是Qt,Qt的发展Qt6的亮点Qt版本说明Qt中文论坛,第1章Qt概述,Qt6的安装,Qt6的安装,下载Qt在线安装器和申请免费账号安装Qt6.x运行QtCreatorQt6开发环境简介,第1章Qt概述,Qt6开发实例介绍,目录CONTENTS,设计器QtDesigner开发实例,01,设计器QtDesigner开发实例,1创建Qt项目创建步骤如下。

(1)运行QtCreator,在欢迎界面左侧点“Projects”按钮,切换至项目管理界面,如图所示。

设计器QtDesigner开发实例,单击其上按钮,或者选择“文件”“新建文件或项目.”命令,创建一个新的项目,出现“新建项目”窗口,如图所示。

设计器QtDesigner开发实例,选择一个项目模板。

点左侧“项目”列表下的“Application(Qt)”,中间列表选“QtWidgetsApplication”选项,单击右下角“Choose.”按钮,进入下一步。

选择保存项目的路径并定义自己项目的名字。

如图所示。

设计器QtDesigner开发实例(4)接下来的界面让用户选择项目的构建(编译)工具,与Qt5不同的是,Qt6能兼容支持多种构建工具,除了Qt原生的qmake外,还增加了对通用标准构建工具CMake的支持,这里我们选择尝试使用新支持的CMake工具,如图所示。

设计器QtDesigner开发实例,(5)根据实际需要,选择一个“基类”。

这里选择QDialog对话框类作为基类,“Classname”(类名)填写Dialog,这时“Headerfile”(头文件)、“Sourcefile”(源文件)及“Formfile”(界面文件)都出现默认的文件名dialog。

注意,对这些文件名都可以根据具体需要进行相应的修改。

默认选中“Generateform”(创建界面)复选框,表示需要采用界面设计器来设计界面,如图所示。

设计器QtDesigner开发实例,(6)再次单击“下一步”按钮,进入“KitSelection”(选择构建套件)界面,由于之前安装选择组件的时候已经指定了使用唯一的编译器MinGW,故这里只有一个选项“DesktopQt6.0.1MinGW64-bit”,如图所示。

设计器QtDesigner开发实例,(7)此时,相应的文件已经自动加载到项目文件列表中,如图所示。

设计器QtDesigner开发实例,单击“完成”按钮完成创建,文件列表中的文件自动在项目树形视图中分类显示,如图所示。

设计器QtDesigner开发实例,2界面设计拖曳控件容器栏的滑动条,在最后的DisplayWidgets容器栏(图)中找到Label标签控件,拖曳三个此控件到中间的窗体中;同样,在InputWidgets容器栏(图)中找到LineEdit编辑框控件,拖曳此控件到中间的窗体中,用于输入半径值;在Buttons容器栏(图)中找到PushButton按钮控件,拖曳此控件到中间的窗体中,用于提交响应单击事件。

设计器QtDesigner开发实例,下面将修改拖曳到窗体中的各控件的属性,如图所示,对象监视器内容如图所示。

设计器QtDesigner开发实例,然后需要对各控件属性进行修改,内容见表1.1。

其中,修改控件Text值的方法有如下两种:

直接双击控件本身即可修改。

在QtDesigner设计器的属性栏中修改,如修改表示半径的Label标签属性,如图1.26所示。

设计器QtDesigner开发实例,修改areaLabel_2的“frameShape”属性为Panel;“frameShadow”属性为Sunken,如图所示。

最终效果如图所示。

设计器QtDesigner开发实例,3编写相应的计算圆面积代码首先简单认识一下Qt编程环境。

找到文件列表中自动添加的main.cpp文件,每个项目都有一个执行的入口函数,此文件中的main()函数就是此项目的入口。

下面详细介绍main()函数的相关内容:

/(a)/(b)/(c),/(d)/创建一个对话框对象/(e)/(f),#includedialog.h#includeintmain(intargc,char*argv)QApplicationa(argc,argv);Dialogw;w.show();returna.exec();,设计器QtDesigner开发实例,现在,有两种方式可以完成计算圆面积功能:

一是通过触发按钮事件完成(方式1);二是通过触发编辑框文本改变事件完成(方式2)。

方式1:

在“LineEdit”编辑框内输入半径值,然后单击“计算”按钮,则在areaLabel_2中显示对应的圆面积。

操作步骤如下。

(1)在“计算”按钮上按鼠标右键,在弹出的下拉菜单中选择“转到槽.”命令,在“转到槽”对话框中选择QAbstractButton的“clicked()”信号,单击“OK”按钮,如图所示。

设计器QtDesigner开发实例,进入dialog.cpp文件中按钮单击事件的槽函数on_countBtn_clicked(),在此函数中添加如下代码:

voidDialog:

on_countBtn_clicked()boolok;QStringtempStr;QStringvalueStr=ui-radiusLineEdit-text();intvalueInt=valueStr.toInt(运行程序,在“LineEdit”文本框内输入半径值,单击“计算”按钮后,显示圆面积值。

设计器QtDesigner开发实例,方式2:

在“LineEdit”编辑框内输入半径值,不需要单击按钮触发事件,直接就在areaLabel_2中显示圆面积。

(1)在“LineEdit”编辑框上按鼠标右键,在弹出的下拉菜单中选择“转到槽.”命令,在“转到槽”对话框中选择QLineEdit的“textChanged(QString)”信号,如图所示。

设计器QtDesigner开发实例,

(2)单击“OK”按钮,进入dialog.cpp文件中的编辑框改变文本内容事件的槽函数on_radiusLineEdit_textChanged(constQString(3)运行此程序,在“LineEdit”编辑框中输入半径值后,程序会直接在areaLabel_2中显示圆的面积值。

目录CONTENTS,代码实现开发实例,02,代码实现开发实例,实现步骤如下。

首先创建一个新项目。

创建过程同1.3.1节的第

(1)(7)步,只是在第(3)步中,项目保存路径为C:

Qt6CH1CH102;第(4)步构建工具选qmake;在第(5)步中,取消“Generateform”(创建界面)复选框的选中状态。

在项目的dialog.h中添加如下加黑代码:

/(a)/(a)/(a),#include#include#includeclassDialog:

publicQDialogQ_OBJECTpublic:

Dialog(QWidget*parent=0);Dialog();private:

;,代码实现开发实例(3)在dialog.cpp中添加如下代码:

/(a),#includeDialog:

Dialog(QWidget*parent):

QDialog(parent),代码实现开发实例,界面运行效果如图所示。

(4)完成程序功能。

以上第

(1)(3)步只完成了界面设计,下面同样通过两种触发不同控件事件的方式来完成计算圆面积的功能。

方式1:

在lineEdit编辑框内输入所需圆的半径值,单击“显示对应圆的面积”按钮后,在label2中显示圆的面积值。

打开dialog.h文件,在类构造函数和控件成员声明后,添加如下加黑代码:

classDialog:

publicQDialog.QPushButton*button;privateslots:

voidshowArea();,代码实现开发实例,打开dialog.cpp文件,在构造函数中添加如下加黑代码:

Dialog:

Dialog(QWidget*parent):

QDialog(parent).mainLayout-addWidget(button,1,1);connect(button,SIGNAL(clicked(),this,SLOT(showArea();在showArea()中实现显示圆面积功能,代码如下:

conststaticdoublePI=3.1416;voidDialog:

showArea()boolok;QStringtempStr;QStringvalueStr=lineEdit-text();intvalueInt=valueStr.toInt(,代码实现开发实例,运行程序。

在lineEdit编辑框中输入圆半径值,单击“显示对应圆的面积”按钮后,在label2中显示圆面积值,最终运行结果如图所示。

代码实现开发实例,方式2:

在lineEdit编辑框中输入所需圆的半径值后,不必单击“显示对应圆的面积”按钮,直接在label2中显示圆的面积值。

这种情况是将编辑框改变文本内容信号QLineEdit:

textChanged(QString)与对话框QDialog的Dialog:

showArea()槽关联起来,操作步骤同方式1,只是在第步中,添加的代码修改为如下加黑语句:

Dialog:

Dialog(QWidget*parent):

QDialog(parent).mainLayout-addWidget(button,1,1);connect(lineEdit,SIGNAL(textChanged(QString),this,SLOT(showArea();,第2章Qt6模板库、工具类及控件,Qt6开发及实例(第5版),字符串类,目录CONTENTS,操作字符串,01,操作字符串,

(1)QString提供了一个二元的“+”操作符用于组合两个字符串,并提供了一个“+=”操作符用于将一个字符串追加到另一个字符串的末尾,例如:

QStringstr1=Welcome;,/str1=Welcometoyou!

str1=str1+toyou!

;QStringstr2=Hello,;str2+=World!

;,/str2=Hello,World!

(2)QString:

append()函数具有与“+=”操作符同样的功能,实现在一个字符串的末尾追加另一个字符串,例如:

QStringstr1=Welcome;QStringstr2=to;,str1.append(str2);str1.append(you!

);,/str1=Welcometo/str1=Welcometoyou!

(3)组合字符串的另一个函数是QString:

sprintf(),此函数支持的格式定义符和C+库中的函数sprintf()定义的一样。

例如:

QStringstr;,str.sprintf(%s,Welcome);str.sprintf(%s,toyou!

);,/str=Welcome/str=toyou!

str.sprintf(%s%s,Welcome,toyou!

);/str=Welcometoyou!

操作字符串,通常,相对于函数QString:

sprintf(),函数QString:

arg()是一个比较好的解决方案,因为它类型安全、完全支持Unicode,并且允许改变%n参数的顺序。

例如:

QStringstr;str=QString(%1wasbornin%2.).arg(John).arg(1998);/str=Johnwasbornin1998.QString也提供了一些其他组合字符串的方法,包括如下几种。

insert()函数:

在原字符串特定的位置插入另一个字符串。

prepend()函数:

在原字符串的开头插入另一个字符串。

replace()函数:

用指定的字符串代替原字符串中的某些字符。

操作字符串,(6)很多时候,去掉一个字符串两端的空白(空白字符包括回车字符“n”、换行字符“r”、制表符“t”和空格字符“”等)非常有用,如获取用户输入的账号时。

QString:

trimmed()函数:

移除字符串两端的空白字符。

QString:

simplified()函数:

移除字符串两端的空白字符,使用单个空格字符“”代替字符串中出现的空白字符。

例如:

QStringstr=Welcomettonyou!

;str=str.trimmed();/str=Welcomettonyou!

目录CONTENTS,查询字符串数据,02,查询字符串数据,函数QString:

startsWith()判断一个字符串是否以某个字符串开头。

此函数具有两个参数。

第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认情况下是大小写敏感的),例如:

QStringstr=Welcometoyou!

;str.startsWith(Welcome,Qt:

CaseSensitive);/返回truestr.startsWith(you,Qt:

CaseSensitive);/返回false函数QString:

endsWith()类似于QString:

startsWith(),此函数判断一个字符串是否以某个字符串结尾。

函数QString:

contains()判断一个指定的字符串是否出现过,例如:

QStringstr=Welcometoyou!

;str.contains(Welcome,Qt:

CaseSensitive);/返回true,查询字符串数据,(4)比较两个字符串也是经常使用的功能,QString提供了多种比较手段。

operator=(constQString&):

比较一个字符串是否大于等于另一个字符串。

compare(constQString&,constQString&,Qt:

CaseSensitivity):

该函数可以指定是否进行大小写的比较,而大小写的比较是完全基于字符的Unicode编码值的,而且是非常快的,返回值类似于localeAwareCompare()函数。

目录CONTENTS,字符串的转换,03,字符串的转换,

(1)QString:

toInt()函数将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong()等。

下面举个例子说明其用法:

/初始化一个125的字符串,QStringstr=125;boolok;inthex=str.toInt(,/ok=true,hex=293/ok=true,dec=125,

(2)QString提供的字符编码集的转换函数将会返回一个constchar*类型版本的QByteArray,即构造函数QByteArray(constchar*)构造的QByteArray对象。

QByteArray类具有一个字节数组,它既可以存储原始字节(rawbytes),也可以存储传统的以“0”结尾的8位的字符串。

在Qt中,使用QByteArray比使用constchar*更方便,转换函数有以下几种。

toAscii():

返回一个ASCII编码的8位字符串。

toLatin1():

返回一个Latin-1(ISO8859-1)编码的8位字符串。

toUtf8():

返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超集,它支持整个Unicode字符集)。

toLocal8Bit():

返回一个系统本地(locale)编码的8位字符串。

目录CONTENTS,字符串优化,04,1隐式共享,2内存分配策略,字符串优化,1隐式共享隐式共享可以降低对内存和CPU资源的使用率,提高程序的运行效率。

它使得在函数中(如参数、返回值)使用值传递更有效率。

QString类采用隐式共享技术,将深拷贝和浅拷贝有机地结合起来。

下面通过一个例子来具体介绍隐式共享是如何工作的。

字符串优化,2内存分配策略QString在一个连续的内存块中保存字符串数据。

当字符串的长度不断增长时,QString需要重新分配内存空间,以便有足够的空间保存增加的字符串。

QString使用的内存分配策略如下。

每次分配4个字符空间,直到大小为20。

在204084之间,QString分配的内存块大小以2倍的速度增长。

从4084开始,每次以2048个字符大小(4096字节,即4KB)的步长增长。

下面举例具体说明QString在后台是如何运行的:

QStringtest()QStringstr;for(inti=0;i9000;+i)str.append(a);returnstr;,第2章Qt6模板库、工具类及控件,容器类,目录CONTENTS,01QList、QLinkedList和QVector类,QList类QLinkedList类3QVector类Java风格迭代器遍历容器STL风格迭代器遍历容器,QList、QLinkedList和QVector类,1QList类QList是迄今为止最常用的容器类,它存储给定数据类型T的一列数值。

继承自QList类的子类有QItemSelection、QQueue、QSignalSpy及QStringList和QTestEventList。

QList不仅提供了可以在列表中进行追加的QList:

append()和Qlist:

prepend()函数,还提供了在列表中间完成插入操作的函数QList:

insert()。

相对于任何其他的Qt容器类,为了使可执行代码尽可能少,QList被高度优化。

QList维护了一个指针数组,该数组存储的指针指向QList存储的列表项的内容。

因此,QList提供了基于下标的快速访问。

对于不同的数据类型,QList采取不同的存储策略,存储策略有以下几种。

如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList会将数值直接存储在它的数组中。

如果QList存储对象的指针,则该指针指向实际存储的对象。

QList、QLinkedList和QVector类,/(a),/(b)/(c),下面举一个例子:

#includeintmain(intargc,char*argv)QListlist;QStringstr(Thisisateststring);liststr;qDebug()list0Howareyou!

;return0;,QList、QLinkedList和QVector类,QLinkedList类QLinkedList是一个链式列表,它以非连续的内存块保存数据。

QLinkedList不能使用下标,只能使用迭代器访问它的数据项。

与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。

QVector类QVector在相邻的内存中存储给定数据类型T的一组数值。

在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由QVector存储数据的方式决定的。

QVector既可以使用下标访问数据项,也可以使用迭代器访问数据项。

继承自QVector类的子类有QPolygon、QPolygonF和QStack。

QList、QLinkedList和QVector类,4Java风格迭代器遍历容器Java风格的迭代器同STL风格的迭代器相比,使用起来更简单方便,不过这也是以轻微的性能损耗为代价的。

对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,其分类见表。

QList、QLinkedList和QVector类,5STL风格迭代器遍历容器对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:

一种提供只读访问;另一种提供读写访问。

由于只读类型的迭代器的运行速度要比读写迭代器的运行速度快,所以应尽可能地使用只读类型的迭代器。

STL风格迭代器的两种分类见表。

目录CONTENTS,02QMap和QHash类,QMap类QHash类Java风格迭代器遍历容器STL风格迭代器遍历容器,QMap和QHash类,QMap类QMap提供了一个从类型为Key的键到类型为T的值的映射。

通常,QMap存储的数据形式是一个键对应一个值,并且按照键Key的顺序存储数据。

为了能够支持一键多值的情况,QMap提供了QMap:

insertMulti()和QMap:

values()函数。

存储一键多值的数据时,也可以使用QMultiMap容器,它继承自QMap。

QHash类QHash具有与QMap几乎完全相同的API。

QHash维护着一张哈希表(HashTable),哈希表的大小与QHash的数据项的数目相适应。

QHash以任意的顺序组织它的数据。

当存储数据的顺序无关紧要时,建议使用QHash作为存放数据的容器。

QHash也可以存储一键多值形式的数据,它的子类QMultiHash实现了一键多值的语义。

QMap和QHash类,3Java风格迭代器遍历容器对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型:

一种提供只读访问;另一种提供读写访问。

其分类见表。

4STL风格迭代器遍历容器对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:

一种提供只读访问;另一种提供读写访问。

其分类见表。

第2章Qt6模板库、工具类及控件,QVariant类,QVariant类,QVariant类类似于C+的联合(union)数据类型,它不仅能够保存很多Qt类型的值,包括QColor、QBrush、QFont、QPen、QRect、QString和QSize等,也能够存放Qt的容器类型的值。

Qt的很多功能都是建立在QVariant基础上的,如Qt的对象属性及数据库功能等。

第2章Qt6模板库、工具类及控件,算法及正则表达式,目录CONTENTS,Qt6常用算法,01,Qt6常用算法,【例】(简单)几个常用算法。

#include#includeintmain(intargc,char*argv),Qt6常用算法,最后,编译运行上述程序,输出结果如下:

a=-19.3b=9.7c=qAbs(a)=19.3qMax(b,c)=19.3bn=qRound(b)=10cn=qRound(c)=19qSwap(bn,cn):

bn=19cn=10,目录CONTENTS,基本的正则表达式,02,基本的正则表达式,正则表达式由表达式(expressions)、量词(quantifiers)和断言(assertions)组成。

最简单的表达式是一个字符。

字符集可以使用表达式如“AEIOU”,表示匹配所有的大写元音字母;使用“AEIOU”则表示匹配所有非元音字母,即辅音字母;连续的字符集可以使用表达式如“a-z”,表示匹配所有的小写英文字母。

量词说明表达式出现的次数,如“x1,2”表示“x”可以至少有一个,至多两个。

在计算机语言中,标识符通常要求以字母或下画线(也称下划线)开头,后面可以是字母、数字和下画线。

满足条件的标识符表示为:

A-Za-z_+A-Za-z_0-9*,基本的正则表达式类似的正则表达式的量词见表。

(3)“”、“$”、“b”都是正则表达式的断言,正则表达式的断言见表。

第2章Qt6模板库、工具类及控件,控件,目录CONTENTS,按钮组(Buttons),01,按钮组(Buttons),按钮组(Buttons)如图所示。

组中各个按钮的名称依次解释如下。

PushButton:

按钮。

ToolButton:

工具按钮。

RadioButton:

单选按钮。

CheckBox:

复选框。

CommandLinkButton:

命令链接按钮。

DialogB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2