.Qt入门培训QtintroductionQt简介Qt的使用Qt深入理解Qt的应用Qt简介什么是Qt?什么是Qt?原来用作用户界面开发,现可用作所有的开发例如:Databases,XML,WebKit,multimedia,networking,OpenGL,scripting,non-GUI...”Qt是一个用C++编写的跨平台开发框架.”什么是Qt?Qt由模块构建QtCorePhononQtXmlPatternsQtXmlQtWebKitQtSvgQtSqlQtScriptQtOpenVGQtOpenGLQtNetworkQtMultimediaQtGui什么是QT?Qt用宏(macros)和内省(introspection)扩展了C++所有的代码仍然是简明C++foreach(intvalue,intList){…}QObject*o=newQPustButton;o-metaObject()-className();//返回”QPushButton”connect(button,SIGNAL(clicked()),window,SLOT(close()));Qt的目的一次编写,到处编译根据不同平台的本地观感生成相应的本地应用简单地使用API,高开发效率,开放性,使用有趣Qt的历史19901991199419992001Haavard和Eirik灵感闪现开始设计,并提出信号和槽的概念1993开发出Qt的第一个图形核心命名为Qt,并建立“奇趣科技”1995签订第一个合同,开始快速发展。1997Qt1.2发布,并且用于开发KDE。Qt2.0发布Qt3.0发布。2005Qt4.0发布2008Nokia收购奇趣科技Qt的跨平台—桌面平台WindowsMacOSXLinux/UnixX11Qt的跨平台—嵌入式平台WindowsCESymbianMaemo嵌入式LinuxQt的授权LGPL–免费你的应用程序可以是开源的或者是不开源的对Qt的修改,必须反馈到社区GPL–免费你的应用程序必须是开源的对Qt的修改,必须反馈到社区商业的–收费你的应用程序可以是不开源的对Qt的修改,可以不开源Qt简介Qt的使用Qt深入理解Qt的应用Qt的代码结构--HelloWorldQt的代码结构--HelloWorld#includeQApplication#includeQLabelintmain(intargc,char**argv){QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();}Qt的代码结构--HelloWorld#includeQApplication#includeQLabelintmain(intargc,char**argv){QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();}Qt的代码结构--HelloWorld#includeQApplication#includeQLabelintmain(intargc,char**argv){QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();}Qt的代码结构--HelloWorld#includeQApplication#includeQLabelintmain(intargc,char**argv){QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();}Qt的代码结构--HelloWorld#includeQApplication#includeQLabelintmain(intargc,char**argv){QApplicationapp(argc,argv);QLabell(HelloWorld!);l.show();returnapp.exec();}Qt开发工具集1.QtCreator2.QtDesigner3.QtLinguist4.QtAssisant5.QtDemos信号(Signal)与槽(Slot)初探QT提供的一种在对象间进行通讯的技术。动态地或松散地将事件和状态变化联系起来。信号和槽机制是使Qt运作的元素。信号(Signal)与槽(Slot)初探类似于windows中的消息和消息响应都是通过C++类成员函数实现的信号和槽是通过连接实现相互关联的包含信号或槽的类必须从QObject继承信号(Signal)与槽(Slot)初探emitclicked();信号(Signal)与槽(Slot)初探privateslots:voidon_addButton_clicked();voidon_deleteButton_clicked();connect(clearButton,SIGNAL(clicked()),listWidget,SLOT(clear()));connect(addButton,SIGNAL(clicked()),this,SLOT(...));2xclear();信号(Signal)与槽(Slot)初探{...emitclicked();...}{...emitclicked();...}{...emitclicked();...}{QStringnewText=QInputDialog::getText(this,Entertext,Text:);if(!newText.isEmpty())ui-listWidget-addItem(newText);}{foreach(QListWidgetItem*item,ui-listWidget-selectedItems()){deleteitem;}}clear();信号(Signal)与槽(Slot)初探classEmployee:publicQObject{Q_OBJECTpublic:Employee();intsalary()const;publicslots:voidsetSalary(intnewSalary);signals:voidsalaryChanged(intnewSalary);private:intmySalary;};emitsalaryChanged(50);信号和槽的声明:信号(Signal)与槽(Slot)初探信号(Signal)与槽(Slot)初探信号与槽机制只能用在继承于QObject的类。槽可以返回值,但通过联接返回时不能有返回值,槽以一个普通的函数实现,可以作为普通函数调用。信号总是返回空,信号总是不必实现一个信号可以连接到多个槽,但槽的调用顺序不确定。信号和槽需要具有相同的参数列表;如果信号的参数比槽多,那么多余的参数会被忽略;如果参数列表不匹配,Qt会产生运行时错误信息信号和槽vs回调回调(callback)是一个函数指针,当一个事件发生时被调用,任何函数都可以被安排作为回调。没有类型安全总是以直接调用方式工作信号和槽的方式更加动态一个更通用的机制更容易互连两个已存在的类相关类之间涉及更少的知识共享用户界面设计用户界面由特定的部件(widget)构建用户界面设计—三种方式1.绝对定位(absolutepositioning)最粗劣的方式对部件的大小、位置进行硬编码2.手工布局(manuallayout)绝对位置,但通过resizeEvent()方法改变大小3.布局管理器(layoutmanagers)部件放置在布局管理器中,使界面更具弹性。布局管理器的优点?让部件适应内容让部件适应翻译变化让部件适应用户设置布局管理几种可用的布局布局管理器和部件“协商”各个部件大小与位置弹簧可以用来填充空白处QGridLayoutQVBoxLayoutQHBoxLayout布局管理器示例对话框由多层的布局管理器和部件组成两种方式:代码实现,使用设计器注意:布局管理器并不是其管理的部件的父对象布局管理器—代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:));topLayout-addWidget(c=newQComboBox());outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();...outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(...));QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(...));buttonLayout-addWidget(newQPushButton(Print));buttonLayout-addWidget(newQPushButton(Cancel));outerLayout-addLayout(buttonLayout);布局管理器—代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:));topLayout-addWidget(c=newQComboBox());outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();...outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(...));QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(...));buttonLayout-addWidget(newQPushButton(Print));buttonLayout-addWidget(newQPushButton(Cancel));outerLayout-addLayout(buttonLayout);布局管理器—代码实现QVBoxLayout*outerLayout=newQVBoxLayout(this);QHBoxLayout*topLayout=newQHBoxLayout();topLayout-addWidget(newQLabel(Printer:));topLayout-addWidget(c=newQComboBox());outerLayout-addLayout(topLayout);QHBoxLayout*groupLayout=newQHBoxLayout();...outerLayout-addLayout(groupLayout);outerLayout-addSpacerItem(newQSpacerItem(...));QHBoxLayout*buttonLayout=newQHBoxLayout();buttonLayout-addSpacerItem(newQSpacerItem(...))