Qt入门培训学习.pptx
《Qt入门培训学习.pptx》由会员分享,可在线阅读,更多相关《Qt入门培训学习.pptx(110页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Qt简介Qt的使用Qt深入理解Qt的应用第1页/共110页Qt简介什么是Qt?第2页/共110页什么是Qt?原来用作用户界面开发,现可用作所有的开发例如:Databases,XML,WebKit,multimedia,networking,OpenGL,scripting,non-GUI.”Qt是一个用C+编写的跨平台开发框架.”第3页/共110页什么是Qt?Qt由模块构建QtCorePhononQtXmlPatternsQtXmlQtWebKitQtSvgQtSqlQtScriptQtOpenVGQtOpenGLQtNetworkQtMultimediaQtGui第4页/共110页什么是QT
2、?Qt用宏(macros)和内省(introspection)扩展了C+所有的代码仍然是简明C+foreach(intvalue,intList)QObject*o=newQPustButton;o-metaObject()-className();/返回”QPushButton”connect(button,SIGNAL(clicked(),window,SLOT(close();第5页/共110页Qt的目的一次编写,到处编译根据不同平台的本地观感生成相应的本地应用简单地使用API,高开发效率,开放性,使用有趣第6页/共110页Qt的历史19901991199419992001Haavard
3、和Eirik灵感闪现开始设计,并提出信号和槽的概念1993开发出Qt的第一个图形核心命名为Qt,并建立“奇趣科技”1995签订第一个合同,开始快速发展。1997Qt1.2发布,并且用于开发KDE。Qt2.0发布Qt3.0发布。2005Qt4.0发布2008Nokia收购奇趣科技第7页/共110页Qt的跨平台桌面平台WindowsMacOSXLinux/UnixX11第8页/共110页Qt的跨平台嵌入式平台WindowsCESymbianMaemo嵌入式Linux第9页/共110页Qt的授权LGPL免费你的应用程序可以是开源的或者是不开源的对Qt的修改,必须反馈到社区GPL免费你的应用程序必须是
4、开源的对Qt的修改,必须反馈到社区商业的收费你的应用程序可以是不开源的对Qt的修改,可以不开源第10页/共110页Qt简介Qt的使用Qt深入理解Qt的应用第11页/共110页Qt的代码结构-Hello World第12页/共110页Qt的代码结构-Hello World#include#includeintmain(intargc,char*argv)QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();第13页/共110页Qt的代码结构-Hello World#include#include int
5、main(intargc,char*argv)QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();第14页/共110页Qt的代码结构-Hello World#include#includeintmain(intargc,char*argv)QApplication app(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();第15页/共110页Qt的代码结构-Hello World#include#includeintmain(inta
6、rgc,char*argv)QApplicationapp(argc,argv);QLabel l(Hello World!);l.show();returnapp.exec();第16页/共110页Qt的代码结构-Hello World#include#includeintmain(intargc,char*argv)QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();return app.exec();第17页/共110页Qt开发工具集1.QtCreator2.QtDesigner3.QtLinguist4.QtAssisant
7、5.QtDemos第18页/共110页信号(Signal)与槽(Slot)初探QT提供的一种在对象间进行通讯的技术。动态地或松散地将事件和状态变化联系起来。信号和槽机制是使Qt运作的元素。第19页/共110页信号(Signal)与槽(Slot)初探类似于windows中的消息和消息响应都是通过C+类成员函数实现的信号和槽是通过连接实现相互关联的包含信号或槽的类必须从QObject继承第20页/共110页信号(Signal)与槽(Slot)初探emitclicked();第21页/共110页信号(Signal)与槽(Slot)初探privateslots:voidon_addButton_cli
8、cked();voidon_deleteButton_clicked();connect(clearButton,SIGNAL(clicked(),listWidget,SLOT(clear();connect(addButton,SIGNAL(clicked(),this,SLOT(.);2xclear();第22页/共110页信号(Signal)与槽(Slot)初探.emitclicked();.emitclicked();.emitclicked();.QStringnewText=QInputDialog:getText(this,Entertext,Text:);if(!newTex
9、t.isEmpty()ui-listWidget-addItem(newText);foreach(QListWidgetItem*item,ui-listWidget-selectedItems()deleteitem;clear();第23页/共110页信号(Signal)与槽(Slot)初探class Employee:public QObjectQ_OBJECTpublic:Employee();int salary()const;public slots:void setSalary(int newSalary);signals:void salaryChanged(int newS
10、alary);private:int mySalary;emit salaryChanged(50);信号和槽的声明:第24页/共110页信号(Signal)与槽(Slot)初探第25页/共110页信号(Signal)与槽(Slot)初探信号与槽机制只能用在继承于QObject的类。槽可以返回值,但通过联接返回时不能有返回值,槽以一个普通的函数实现,可以作为普通函数调用。信号总是返回空,信号总是不必实现一个信号可以连接到多个槽,但槽的调用顺序不确定。信号和槽需要具有相同的参数列表;如果信号的参数比槽多,那么多余的参数会被忽略;如果参数列表不匹配,Qt会产生运行时错误信息第26页/共110页信号
11、和槽vs回调回调(callback)是一个函数指针,当一个事件发生时被调用,任何函数都可以被安排作为回调。没有类型安全总是以直接调用方式工作信号和槽的方式更加动态一个更通用的机制更容易互连两个已存在的类相关类之间涉及更少的知识共享第27页/共110页用户界面设计用户界面由特定的部件(widget)构建第28页/共110页用户界面设计三种方式1.绝对定位(absolutepositioning)最粗劣的方式对部件的大小、位置进行硬编码2.手工布局(manuallayout)绝对位置,但通过resizeEvent()方法改变大小3.布局管理器(layoutmanagers)部件放置在布局管理器中,
12、使界面更具弹性。第29页/共110页布局管理器的优点?让部件适应内容让部件适应翻译变化让部件适应用户设置第30页/共110页布局管理几种可用的布局布局管理器和部件“协商”各个部件大小与位置弹簧可以用来填充空白处QGridLayoutQVBoxLayoutQHBoxLayout第31页/共110页布局管理器示例对话框由多层的布局管理器和部件组成两种方式:代码实现,使用设计器注意:布局管理器并不是其管理的部件的父对象第32页/共110页布局管理器代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHB
13、oxLayout();topLayout-addWidget(newQLabel(Printer:);topLayout-addWidget(c=newQComboBox();outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();.outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(.);QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-add
14、SpacerItem(newQSpacerItem(.);buttonLayout-addWidget(newQPushButton(Print);buttonLayout-addWidget(newQPushButton(Cancel);outerLayout-addLayout(buttonLayout);第33页/共110页布局管理器代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:);t
15、opLayout-addWidget(c=newQComboBox();outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();.outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(.);QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(.);buttonLayout-addWidget(
16、newQPushButton(Print);buttonLayout-addWidget(newQPushButton(Cancel);outerLayout-addLayout(buttonLayout);第34页/共110页布局管理器代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:);topLayout-addWidget(c=newQComboBox();outerLayout-addL
17、ayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();.outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(.);QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(.);buttonLayout-addWidget(newQPushButton(Print);buttonLayout-addWidget(newQPus
18、hButton(Cancel);outerLayout-addLayout(buttonLayout);第35页/共110页布局管理器代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:);topLayout-addWidget(c=newQComboBox();outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLay
19、out();.outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(.);QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(.);buttonLayout-addWidget(newQPushButton(Print);buttonLayout-addWidget(newQPushButton(Cancel);outerLayout-addLayout(buttonLayout);
20、第36页/共110页布局管理器代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:);topLayout-addWidget(c=newQComboBox();outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();.outerLayout-addLayout(groupLayout);outerLayou
21、t-addSpacerItem(newQSpacerItem(.);QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(.);buttonLayout-addWidget(newQPushButton(Print);buttonLayout-addWidget(newQPushButton(Cancel);outerLayout-addLayout(buttonLayout);第37页/共110页布局管理器代码实现QHBoxLayout*groupLayout=newQHBoxL
22、ayout();QGroupBox*orientationGroup=newQGroupBox();QVBoxLayout*orientationLayout=newQVBoxLayout(orientationGroup);orientationLayout-addWidget(newQRadioButton(Landscape);orientationLayout-addWidget(newQRadioButton(Portrait);groupLayout-addWidget(orientationGroup);QGroupBox*colorGroup=newQGroupBox();QV
23、BoxLayout*colorLayout=newQVBoxLayout(colorGroup);colorLayout-addWidget(newQRadioButton(BlackandWhite);colorLayout-addWidget(newQRadioButton(Color);groupLayout-addWidget(colorGroup);Horizontalbox,包含groupboxes,verticalboxes,radiobuttons第38页/共110页布局管理器设计器可以使用设计器来建立同样的结构第39页/共110页通用部件Qt包含针对所有情形的大量通用部件;第
24、三方控件,如QWT自定义控件第40页/共110页尺寸(size)的策略布局管理器是在空间和其他布局管理器之间进行协调布局管理器提供布局结构水平布局和垂直布局网格布局部件则提供各个方向上的尺寸策略最大和最小尺寸第41页/共110页尺寸的策略例子未完成!printerList-setSizePolicy(QSizePolicy:Expanding,QSizePolicy:Fixed)第42页/共110页尺寸的策略每一个widget有一个大小的示意,它给出了各个方向上尺寸的策略Fixed规定了widget的尺寸Minimum规定了可能的最小值Maximum规定可能的最大值Preferred给出最好的
25、值但不是必须的Expanding同preferred,但希望增长MinimumExpanding同minimum,但希望增长Ignored忽略规定尺寸,widget得到尽量大的空间第43页/共110页如果?2个preferred相邻1个preferred,1个expanding2个expanding相邻空间不足以放置widget(fixed)第44页/共110页关于尺寸的更多信息可用最大和最小属性更好地控制widget的大小maximumSize最大可能尺寸minimumSize最小可能尺寸ui-pushButton-setMinimumSize(100,150);ui-pushButton-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt 入门 培训 学习
限制150内