Qt-5开发及实例-第1章-Qt概述课件.pptx

上传人(卖家):晟晟文业 文档编号:5101746 上传时间:2023-02-11 格式:PPTX 页数:66 大小:2.68MB
下载 相关 举报
Qt-5开发及实例-第1章-Qt概述课件.pptx_第1页
第1页 / 共66页
Qt-5开发及实例-第1章-Qt概述课件.pptx_第2页
第2页 / 共66页
Qt-5开发及实例-第1章-Qt概述课件.pptx_第3页
第3页 / 共66页
Qt-5开发及实例-第1章-Qt概述课件.pptx_第4页
第4页 / 共66页
Qt-5开发及实例-第1章-Qt概述课件.pptx_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、第第1章章 Qt概述概述什么什么是是Qt1Qt的发展的发展Qt最早是在1991年由奇趣科技开发的,1996年进入商业领域,成为全世界范围内数千种成功的应用程序的基础。它也是目前流行的Linux桌面环境KDE的基础,KDE是Linux发行版的主要一个标准组件。2008年,奇趣科技被诺基亚公司收购,Qt成为诺基亚旗下的编程语言工具。从2009年5月发布的Qt 4.5起,诺基亚公司宣布Qt源代码库面向公众开放,Qt开发人员可通过为Qt及与其相关的项目贡献代码、翻译、示例及其他内容,协助引导和塑造Qt的未来发展。2011年,Digia公司(芬兰的一家IT服务公司)从诺基亚公司收购了Qt的商业版权。20

2、12年8月9日,作为非核心资产剥离计划的一部分,诺基亚公司宣布将Qt软件业务正式出售给Digia公司。2013年7月3日,Digia公司Qt开发团队在其官方博客上宣布Qt 5.1正式版发布;同年12月11日,又发布Qt 5.2正式版。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布;同年5月20日,配套发布了Qt 5.3正式版。2Qt 5.11版的改进版的改进(1)(2)(4)(3)对Qt Core进行完善,更好地支持Unicode。在Qt Network中,iOS可支持ALPN和HTTP/2。Qt QML编译器管道负责解析和编译QML,性能提高、更可维护。将QML编

3、译为与平台无关的字节码。在Qt Quick中,支持在Image元素中加载压缩纹理,支持.ktx和.pkm容器文件格式,可以通过GPU直接处理,减少应用程序启动时间和内存消耗。Qt GUI基于Microsoft UI Automation,并且更好地支持高DPI显示。改进Linux上的打印对话框,为CUPS的选项提供了更好的支持。2Qt 5.11版的改进版的改进(5)(6)(8)(7)Qt Location实现对逐向导航的支持,通过API来创建不绑定到QQuickItems的地图对象。改进MapPolyline对象的性能,图层支持与Map组件结合。使用Qt for Webassembly,允许用

4、户将Web和浏览器作为Qt应用程序的平台。支持基于硬件的图形层和VSP2硬件合成平台的技术预览版,有助于提高视频性能并降低功耗。完善Qt Serialbus和Bluetooth对CAN总线和BTLE的支持。KNX模块增加对OPC/UA的支持。更新Qt Webengine的Chromium版本。支持嵌入式DevTools,包含可安装的Cookie过滤器和配额权限。(9)不再支持MSVC 2013、QNX 6.6和macOS 10.10。3Qt版本说明版本说明Qt按照不同的版本发行,分为商业版和开源版。Qt商业版为商业软件提供开发环境,它们提供传统商业软件发行版,并且提供在协议有效期内的免费升级和

5、技术支持服务。而Qt开源版是为了开发自由而设计的开放源码软件,它提供了和商业版本同样的功能,在GNU通用公共许可证下,它是免费的。第第1章章 Qt概述概述Qt 5的安装的安装1下载下载Qt 5.112申请免费账号申请免费账号0101下载下载Qt和申请免费账号和申请免费账号3Qt版本说明版本说明在Qt官方网站下载Qt5.11安装包,Qt5.11官方下载地址如下:http:/www.qtcn.org/bbs/read-htm-tid-1075.htmlQt 5.9 之后的安装包与之前相比,不再区分 VS 版本和 MinGW 版本,而是全都整合到了一个安装包中。因此,与之前的安装包相比,体积也是大了

6、不少,以前是 1G 多,现在是 2G 多。选择Windows Host下的Qt5.11.0 for Windows(2.0GB),如图1.1所示。2申请免费账号申请免费账号登录The Qt Company公司官网(https:/www.qt.io),单击,选择,进入Qt申请免费账号页,如图1.2所示。0202安装安装Qt 5.11安装安装Qt 5.11双击启动安装向导,加入Qt5.11.1的安装欢迎页面,如图1.3所示。单击“Next”按钮,出现如图1.4示界面要求输入Qt免费账号,并设置密码。安装安装Qt 5.11单击“Next”按钮,进入“设置-Qt5.11.1”页。单击“下一步”按钮,进

7、入“安装文件夹”页,系统列出Qt的默认安装路径,用户可以修改,并勾选“Associate common file types with Qt Creator.”复选框,如图1.5所示。单击“下一步”按钮,在接下来的“选择组件”页,单击“全选”按钮选择安装全部组件,如图1.6所示。安装安装Qt 5.11单击“Next”按钮,在“许可协议”页,选中“I have read and agree to the terms contained in the license agreements.”接受许可协议,如图1.7所示。单击“下一步”按钮,进入Qt开始菜单快捷方式,可修改系统默认的Qt开始菜单,如

8、图1.8所示。安装安装Qt 5.11单击“下一步”按钮,进入“已做好安装准备”页,如图1.9所示。单击“安装”按钮,系统开始进行安装,如图1.10所示。安装安装Qt 5.11安装进程完成后,如图1.11所示,勾选“Launch Qt Creator”复选框,单击“完成”按钮结束安装。系统会自行启动Qt Creator,Qt Creator初始界面。0303运行运行Qt 5 Creator运行运行Qt 5 CreatorQt Creator运行后,进入Qt Creator初始界面,如图1.12所示。运行运行Qt 5 Creator在欢迎界面中可以看到最左端的一栏按钮,该栏按钮功能分别如下。(欢迎

9、):欢迎):在此处可以选择自带的例子演示,在下一次打开欢迎界面时能够显示最近一次的一些项目,免除自己再去查找的麻烦。(编辑):编辑):在此处编写代码进行程序设计。(设计):设计):在这里设计图形界面,进行部件属性设置、信号和槽设置及布局设置等操作。(Debug):):在此界面下可以根据需要调试程序,以便跟踪观察程序的运行情况。(项目):项目):在此界面下可以完成开发环境的相关配置。(帮助):帮助):可以在此处输入关键字,查找相关帮助信息。0404Qt 5开发环境开发环境Qt 5开发环境开发环境在设计器中用鼠标直接拖曳这些窗口部件,能够高效、快速地实现GUI界面的设计,界面直观形象,所见即所得。

10、Qt Designer界面如图1.13所示。Qt 5开发环境开发环境进入Qt设计器主界面后,看到的form部分(如图1.14所示)就是将要设计的顶层窗口部件(顶层窗口部件是其他子窗口部件的载体)。Qt 5开发环境开发环境选中Qt设计器“控件”“视图”中的全部选项,在Qt设计器的主界面上可以看到设计器提供的一些编辑工具子窗口(如图1.13所示)。对象查看器(对象查看器(Object Inspector):):列出了界面中所有窗口部件,以及各窗口部件的父子关系和包容关系。属性编辑器(属性编辑器(Property Editor):):列出了窗口部件可编辑的属性。Action编辑器(编辑器(Actio

11、n Editor):):列出了为窗口部件设计的QAction动作,通过“添加”或“删除”按钮可以新建一个可命名的QAction动作或删除指定的QAction动作。信号和槽编辑器(信号和槽编辑器(Signals&Slots Editor):):列出了在Qt设计器中关联的信号和槽,通过双击列中的对象或信号/槽,可以进行对象的选择和信号/槽的选择。控件编辑模式(控件编辑模式(Edit Widgets):):可以在Qt设计器中添加GUI窗口部件并修改它们的属性和外观。信号信号/槽编辑模式(槽编辑模式(Edit Signals/Slots):):可以在Qt设计器中的窗口部件上关联Qt已经定义好的信号和槽

12、。伙伴编辑模式(伙伴编辑模式(Edit Buddies):可以在Qt设计器中的窗口部件上建立QLabel标签和其他窗口部件的伙伴关系。Tab顺序编辑模式(顺序编辑模式(Edit Tab Order):):可以在Qt设计器中的窗口部件上设置Tab键在窗口部件上的焦点顺序。第第1章章 Qt概述概述Qt 5开发步骤及实例开发步骤及实例Qt 5开发步骤及实例开发步骤及实例下面以完成计算圆面积功能这一简单例子来介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容信号和槽机制(Signal&Slot)。当用户输入一个圆的半径后,可以显示计算后的圆的面积值。运行效果如图1.15所示。01

13、01设计器设计器Qt 5 Designer实现实现1界面设计界面设计2编写相应的计算圆面积代码编写相应的计算圆面积代码【例】【例】(简单)(CH101)采用设计器Qt Designer实现计算圆面积,完成如图1.15所示的功能。首先进行界面设计,然后编写相应的计算圆面积代码。1界面设计界面设计步骤如下。(1)单击运行Qt Creator,进入欢迎界面(见图1.10)。单击其上 按钮,或者选择“文件”“新建文件或项目.”命令,创建一个新的工程,出现“新建项目”窗口,如图1.16所示。1界面设计界面设计(2)单击选择项目“Application”“Qt Widgets Application”选项

14、,单击“Choose.”按钮,进入下一步。(3)选择保存项目的路径并定义自己项目的名字。注意,保存项目的路径中不能有中文字。项目命名没有大小写要求,依据个人习惯命名即可。这里将项目命名为Dialog,保存路径为D:QtCH1CH101,如图1.17所示。单击“下一步”按钮进入下一步骤。1界面设计界面设计(5)根据实际需要,选择一个“基类”。这里选择QDialog对话框类作为基类,这时“类名”“头文件”“源文件”及“界面文件”都出现默认的文件名。注意,对这些文件名都可以根据具体需要进行相应的修改。默认选中“创建界面”复选框,表示需要采用界面设计器来设计界面,否则需要利用代码完成界面的设计,如图1

15、.19所示。1界面设计界面设计(6)选择完成后单击“下一步”按钮,相应的文件自动加载到项目文件列表中,如图1.20所示。1界面设计界面设计单击“完成”按钮完成创建,文件列表中的文件自动分类显示,如图1.21(a)所示,各个文件包含在相应的文件夹中,单击文件夹前的“”图标可以显示该文件夹下的文件;而单击文件夹前面的“”图标则可隐藏该文件夹下的文件。单击上部灰色工具栏中的过滤符号 后,弹出一个下拉列表,勾选“简化树形视图”则切换到简单的文件列表,如图1.21(b)所示。1界面设计界面设计(7)双击dialog.ui,进入界面设计器Qt Designer编辑状态,开始进行设计器(Qt Designe

16、r)编程。拖曳控件容器栏的滑动条,在最后的Display Widgets容器栏(图1.22)中找到Label标签控件,拖曳三个此控件到中间的编辑框中;同样,在Input Widgets容器栏(图1.21)中找到Line Edit文本控件,拖曳此控件到中间的编辑框中,用于输入半径值;在Buttons容器栏(图1.24)中找到Push Button按钮控件,拖曳此控件到中间的编辑框中,用于提交响应单击事件。1界面设计界面设计下面将修改拖曳到编辑框中的各控件的属性,如图1.25所示,对象监视器内容如图1.26所示。1界面设计界面设计然后需要对各控件属性进行修改,内容见表1.1。Classtextob

17、jectNameQLabel半径:radiusLabelQLineEdit radiusLineEditQLabel面积:areaLabel_1QLabel areaLabel_2QPushButton计算countBtn其中,修改控件Text值的方法有如下两种。直接双击控件本身即可修改。在Qt Designer设计器的属性栏中修改,如修改表示半径的Label标签,如图1.25所示。1界面设计界面设计修改areaLabel_2的“frameShape”为Panel;“frameShadow”为Sunken,如图1.26所示。最终效果如图1.27所示。2编写相应的计算圆面积代码编写相应的计算圆面

18、积代码首先简单认识一下Qt编程环境。找到文件列表中自动添加的main.cpp文件,如图1.19所示。每个工程都有一个执行的入口函数,此文件中的main()函数就是此工程的入口。下面详细介绍main()函数的相关内容:#include dialog.h/(a)#include/(b)int main(int argc,char*argv)/(c)QApplication a(argc,argv);/(d)Dialog w;/创建一个对话框对象 w.show();/(e)return a.exec();/(f)2编写相应的计算圆面积代码编写相应的计算圆面积代码其中,其中,(a)#include d

19、ialog.h:包含了程序中要完成功能的Dialog类的定义,在Dialog类中封装完成所需要的功能。注意,使用哪个类就必须将包含该类的头文件引用过来。例如,若要用到一个按钮类时,则必须在此处添加一行代码#include,这表明包含了按钮(QPushButton)类的定义。(b)#include:Application类的定义。在每一个使用Qt图形化应用程序中都必须使用一个QApplication对象。QApplication管理了各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等。(c)int main(int argc,char*argv):应用程序的入口,几乎在所有使用Qt

20、的情况下,main()函数只需要在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。所有Qt程序中都必须有且只有一个main()函数。main()函数有两个参数,即argc和argv。argc是命令行变量的数量,argv是命令行变量的数组。2编写相应的计算圆面积代码编写相应的计算圆面积代码(d)QApplication a(argc,argv):a是这个程序的QApplication对象。在任何Qt的窗口系统部件被使用之前必须创建QApplication对象。它在这里被创建并且处理这些命令行变量。所有被Qt识别的命令行参数都将从argv中被移去(并且argc也因此而减少

21、)。(e)w.show():当创建一个窗口部件的时候,默认它是不可见的,必须调用show()函数使它变为可见。(f)return a.exec():程序进入消息循环,等待可能的输入进行响应。这里就是main()函数将控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。在exec()函数中,Qt接收并处理用户和系统的事件并且将它们传递给适当的窗口部件。2编写相应的计算圆面积代码编写相应的计算圆面积代码方式方式1:在“Line Edit”文本框内输入半径值,然后单击“计算”按钮,则在areaLabel_2中显示对应的圆面积。编写代码步骤如下。(1)在“计算”

22、按钮上按鼠标右键,在弹出的下拉菜单中选择“转到槽.”命令,在“转到槽”对话框中选择“clicked()”信号,单击“OK”按钮,如图1.28所示。2编写相应的计算圆面积代码编写相应的计算圆面积代码(2)进入dialog.cpp文件中按钮单击事件的槽函数on_countBtn_clicked()。信号与槽连接的具体说明参照本书后面提供的知识点链接部分。在此函数中添加如下代码:void Dialog:on_countBtn_clicked()bool ok;QString tempStr;QString valueStr=ui-radiusLineEdit-text();int valueInt=

23、valueStr.toInt(&ok);double area=valueInt*valueInt*PI;/计算圆面积 ui-areaLabel_2-setText(tempStr.setNum(area);(3)在dialog.cpp文件开始处添加以下语句:const static double PI=3.1416;定义全局变量PI。运行程序,在“Line Edit”文本框内输入半径值,单击“计算”按钮后,显示圆面积,完成计算圆面积功能。2编写相应的计算圆面积代码编写相应的计算圆面积代码方式方式2:在“Line Edit”文本框内输入半径值,不需要单击按钮触发单击事件,直接就在areaLab

24、el_2中显示圆面积。编写代码步骤如下。(1)在“Line Edit”文本框上按鼠标右键,在弹出的下拉菜单中选择“转到槽.”命令,在“转到槽”对话框中选择“textChanged(QString)”信号,如图1.29所示。2编写相应的计算圆面积代码编写相应的计算圆面积代码(2)单击“OK”按钮,进入dialog.cpp文件中的文本编辑框改变值内容事件的槽函数on_radiusLineEdit_textChanged(const QString&arg1)。在此函数中添加如下代码:void Dialog:on_radiusLineEdit_textChanged(const QString&ar

25、g1)bool ok;QString tempStr;QString valueStr=ui-radiusLineEdit-text();int valueInt=valueStr.toInt(&ok);double area=valueInt*valueInt*PI;/计算圆面积 ui-areaLabel_2-setText(tempStr.setNum(area);0202代码实现简单实例代码实现简单实例代码实现简单实例代码实现简单实例【例】【例】(简单)(CH102)采用编写代码的方式来实现计算圆面积的功能。步骤如下。(1)首先创建一个新工程。创建过程和本书1.3.1节界面设计中的第(1

26、)(7)步相同,只是在第(3)步中,项目命名为Dialog且保存路径为D:QtCH1CH102,在第(5)步中,取消“创建界面”复选框的选中状态。(2)在上述工程的dialog.h中添加如下加黑代码:#include/(a)#include/(a)#include/(a)class Dialog:public QDialogQ_OBJECTpublic:Dialog(QWidget*parent=0);Dialog();private:QLabel*label1,*label2;/(b)QLineEdit*lineEdit;/(b)QPushButton*button;/(b);代码实现简单实

27、例代码实现简单实例其中,其中,(a)加入实现Label、LineEdit、PushButton控件的头文件。(b)定义界面中的Label、LineEdit、PushButton控件对象。label1标签对象提示“请输入圆的半径”,label2标签对象显示圆面积计算结果,LineEdit文本框对象用于输入半径,PushButton为“计算”命令按钮对象。Q_OBJECT宏的作用是启动Qt 5元对象系统元对象系统的一些特性(如支持信号和槽等),它必须放置到类定义的私有区中。代码实现简单实例代码实现简单实例(3)在dialog.cpp 中添加如下代码:#include/(a)Dialog:Dialo

28、g(QWidget*parent):QDialog(parent)label1=new QLabel(this);label1-setText(tr(请输入圆的半径:);lineEdit=new QLineEdit(this);label2=new QLabel(this);button=new QPushButton(this);button-setText(tr(显示对应圆的面积);QGridLayout*mainLayout=new QGridLayout(this);/(b)mainLayout-addWidget(label1,0,0);mainLayout-addWidget(li

29、neEdit,0,1);mainLayout-addWidget(label2,1,0);mainLayout-addWidget(button,1,1);代码实现简单实例代码实现简单实例其中,(a)#include 为加入实现布局管理器的头文件。(b)QGridLayout*mainLayout=new QGridLayout(this)用于布局管理器,将所有控件的位置固定。界面运行效果如图1.30所示。代码实现简单实例代码实现简单实例(4)完成程序功能:以上第(1)(3)步代码只完成了界面设计,下面同样通过两种触发不同控件事件的方式来完成计算圆面积的功能。方式方式1:在lineEdit文本

30、框内输入所需圆的半径值,单击“显示对应圆的面积”按钮后,在label2中显示相对应的圆的面积值。打开dialog.h文件,在类构造函数和控件成员声明后,添加如下加黑代码:class Dialog:public QDialog .QPushButton*button;private slots:void showArea();代码实现简单实例代码实现简单实例 打开dialog.cpp文件,在构造函数中添加如下加黑代码:Dialog:Dialog(QWidget*parent):QDialog(parent).mainLayout-addWidget(button,1,1);connect(but

31、ton,SIGNAL(clicked(),this,SLOT(showArea();在showArea()中实现显示圆面积功能,代码如下:const static double PI=3.1416;void Dialog:showArea()bool ok;QString tempStr;QString valueStr=lineEdit-text();int valueInt=valueStr.toInt(&ok);double area=valueInt*valueInt*PI;label2-setText(tempStr.setNum(area);代码实现简单实例代码实现简单实例 运行程

32、序。在lineEdit文本框中输入圆半径值,单击“显示对应圆的面积”按钮后,在label2中显示圆面积值,最终运行结果如图1.33所示。代码实现简单实例代码实现简单实例方式方式2:在lineEdit文本框中输入所需圆的半径值后,不必单击“显示对应圆的面积”按钮,直接在label2中显示圆的面积值。操作步骤和方式1相同,只是在上述第步中,添加的代码修改为如下加黑代码:Dialog:Dialog(QWidget*parent):QDialog(parent).mainLayout-addWidget(button,1,1);connect(lineEdit,SIGNAL(textChanged(Q

33、String),this,SLOT(showArea();0303Qt低版本实例迁移低版本实例迁移Qt低版本实例迁移低版本实例迁移Qt 5开发及实例(第3版)以Qt 5.8进行介绍,所有实例在该版本下开发。本书以Qt 5.11作为平台开发,其基本内容与Qt 5.8是兼容的。如果在Qt 5.11平台下打开Qt 5.8的实例工程,系统显示如图1.34所示。第第1章章 Qt概述概述Qt 5的安装:概念解析的安装:概念解析0000伙伴编辑模式(伙伴编辑模式(Edit Buddies)伙伴编辑模式(伙伴编辑模式(Edit Buddies)QLabel标签和伙伴(buddy)窗口部件包括一个标签(QLab

34、el)和一个窗口部件,它们具有伙伴关系,指当用户激活标签的快捷键时,鼠标/键盘的焦点将会转移到它的伙伴窗口部件上。只有QLabel标签对象才可以有伙伴窗口部件,也只有在该QLabel对象具有快捷键(在显示文本的某个字符前面添加一个前缀“&”,就可以定义快捷键)时,伙伴关系才有效。例如:QLineEdit*ageLineEdit=new QLineEdit(this);QLabel*ageLabel=new QLabel(&Age,this);ageLabel-setBuddy(ageLineEdit);代码定义了ageLabel标签的组合键为Alt+A,并将行编辑框ageLineEdit设为它

35、的伙伴窗口部件。当用户按下Alt+A组合键时,焦点将会跳至行编辑框ageLineEdit中。第第1章章 Qt概述概述Qt 5开发步骤及实例:概念解析开发步骤及实例:概念解析0101信号和槽机制(信号和槽机制(Signal&Slot)1信号与槽机制的连接方式信号与槽机制的连接方式2信号与槽机制的优点信号与槽机制的优点3信号与槽机制的效率信号与槽机制的效率1信号与槽机制的连接方式信号与槽机制的连接方式(1)一个信号可以与另一个信号相连,代码如下:connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1);表示Object1的信号1发送可以触发Ob

36、ject2的信号1发送。(2)同一个信号可以与多个槽相连,代码如下:connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2);connect(Object1,SIGNAL(signal2),Object3,SIGNAL(slot1);(3)同一个槽可以响应多个信号,代码如下:connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2);connect(Object3,SIGNAL(signal2),Object2,SIGNAL(slot2);但是,常用的连接方式为:connect(Object1,S

37、IGNAL(signal),Object2,SLOT(slot);其中,signal为对象Object1的信号,slot为对象Object2的槽。在本书1.3.1节(通过设计器实现)实例中,在Qt应用程序的用户界面加入计算圆面积的“计算”按钮后,应用程序并没有响应计算操作。这是因为程序还没有将相应的信号和槽关联起来。因此,为了响应用户的计算面积值的操作,需要将“计算”按钮发送的单击信号QAbstractButton:clicked()和对话框QDialog的Dialog:on_countBtn_clicked()槽关联起来,可以根据需要在槽函数中进行相应的操作。类似地,改变文本编辑框内容信号Q

38、LineEdit:textChanged(QString)产生后与对话框QDialog的Dialog:on_ radiusLineEdit_textChanged(const QString&arg1)槽关联起来。在本书1.3.2节(通过编写代码实现)实例中,将“显示对应圆的面积”按钮发送的单击信号QAbstractButton:clicked()和对话框QDialog的Dialog:showArea()槽关联起来。类似地,改变文本编辑框内容信号QLineEdit:textChanged(QString)产生后也与对话框QDialog的Dialog:showArea()槽关联起来。SIGNAL

39、()和SLOT()是Qt定义的两个宏,它们返回其参数的C语言风格的字符串(const char*)。因此,下面关联信号和槽的两个语句是等同的:connect(button,SIGNAL(clicked(),this,SLOT(showArea();connect(button,clicked(),this,showArea();1信号与槽机制的连接方式信号与槽机制的连接方式2信号与槽机制的优点信号与槽机制的优点(1)类型安全。类型安全。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数与接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数是可以少于信号的参数个数的,但缺

40、少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。(2)松散耦合。松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无须知道是哪个对象的哪个槽需要接收它发出的信号,它只需做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道是哪个对象的哪个槽接收到了信号。同样,对象的槽也不知道是哪些信号关联了自己,而一旦关联信号和槽,Qt就保证了适合的槽得到了调用。即使关联的对象在运行时被删除,应用程序也不会崩溃。3信号与槽机制的效率信号与槽机制的效率信号和槽机制增强了对象间通信的灵活性,然而,这也损失了一些性能。同回

41、调函数相比,信号和槽机制运行速度有些慢。通常,通过传递一个信号来调用槽函数会比直接调用非虚函数的运行速度慢10倍。主要原因如下。(1)需要定位接收信号的对象。(2)安全地遍历所有的关联(如一个信号关联多个槽的情况)。(3)编组(marshal)/解组(unmarshal)传递的参数。(4)在多线程时,信号可能需要排队等待。0202Qt 5元对象系统元对象系统Qt 5元对象系统元对象系统Qt 5元对象系统提供了对象间的通信机制(信号和槽)、运行时类型信息和动态属性系统的支持,是标准C+的一个扩展,它使Qt能够更好地实现GUI图形用户界面编程。Qt 5的元对象系统不支持C+模板,尽管该模板扩展了标

42、准C+的功能。但是,元对象系统提供了模板无法提供的一些特性。Qt 5元对象系统基于以下三个事实。(1)基类QObject:任何需要使用元对象系统功能的类必须继承自QObject。(2)Q_OBJECT宏:Q_OBJECT宏必须出现在类的私有声明区中,用于启动元对象的特性。(3)元对象编译器(Meta-Object Compiler,moc):为QObject子类实现元对象特性提供必要的代码实现。0303布布 局局 管管 理理 器器布局管理器布局管理器在设计较复杂的GUI用户界面时,仅通过指定窗口部件的父子关系以期达到加载和排列窗口部件的方法是行不通的,最好的办法是使用Qt提供的布局管理器。QG

43、ridLayout*mainLayout=new QGridLayout(this);/(a)mainLayout-addWidget(label1,0,0);/(b)mainLayout-addWidget(lineEdit,0,1);mainLayout-addWidget(label2,1,0);mainLayout-addWidget(button,1,1);setLayout(mainLayout);/(c)其中,其中,(a)QGridLayout*mainLayout=new QGridLayout(this):创建一个网格布局管理器对象mainLayout,并用this指出父窗口。(b)mainLayout-addWidget():分别将控件对象label1、lineEdit、label2和button放置在布局管理器中,还可以在创建布局管理器对象时不必指明父窗口。(c)QWidget:setLayout():将布局管理器添加到对应的窗口部件对象中。因为这里的主窗口就是父窗口,所以直接调用setLayout(mainLayout)即可。

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Qt-5开发及实例-第1章-Qt概述课件.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|