《QT编程介绍课件.ppt》由会员分享,可在线阅读,更多相关《QT编程介绍课件.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、你你的第一个的第一个QT工程工程目录一、为什么选择QT二、QT在Windows下开发环境的搭建三、QT程序实例四、QT进阶:信号和槽为什么选择为什么选择QT基于QT开发的软件(1):GOOGLE地球基于QT的软件(1):MAYA基于QT的软件(1):更多Opera浏览器Skype网络电话QCadAdobePhotoshopAlbumCGAL计算几何库QT优越性1.优良的跨平台特性Qt支持下列操作系统:Windows,Linux,Solaris,Mac,SunOS,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX 等等。2.面向对象Qt的良好封装机制使得Qt的模块化程度非常高,可
2、重用性较好,对于用户开发来说是非常 方便的。Qt 提供了一种称为 signals/slots信号和槽的安全类型来替代 callback,具有可查询和可设计的属性,这使得各个元件 之间的协同工作变得十分简单。3.丰富的APIQt包括多达500个以上的C+类,还替供基于模板的 collections,serialization,file,I/O device,directory management,date/time 类。甚至还包括正则表达式的处理功能。4.大量的开发文档Network/XML/OpenGL/Database/webkit/.5.用户自定义控件其他的工具包在应用时都存在一个普遍的
3、问题,就是经常没有真正适合需求的控件,生成的自定义控件对用户来说,也是一个黑匣子。比如,在Motif手册中就讨论了用户自定义的控件的问题。而在Qt中,能够创建控件,具有绝对的优越性,生成自定义控件非常简单,并且容易修改控件。6.方便性 由于Qt是一种跨平台的GUI工具包,所以,它对编程者隐藏了在处理不同窗口系统时的潜在问题。为了将基于Qt程序更加方便,Qt包含了一系列类,该类能够使程序员避免了在文件处理、时间处理等方面存在依赖操作系统方面的细节问题。7.国际化Qt为本地化应用提供完全的支持,所有用户界面的文本或字符串都可以利用翻译工具将其译成各国语言。QT优越性8、高性能的工具 对于库来讲,它
4、的有效性远超过应用性。为了提高Qt库的有效性、快捷性,对其进行了优化,Qt能执行一些基本的任务,比如图形的润色,比一般的基于平台的代码要快。Qt是基于Xlib,而不依赖Motif工具包。可用户化的外观 9、Qt支持主题所以基于Qt的应用软件能在Mac外观、Windows等外观主题之间互换,甚至改变运行时间。这些应用程序不管是在XWindow下,还是在MicrosoftWindows下都可以独立操作、运行。QT优越性10、优越的绘画功能Qt的绘画工具QPainter类,在任意一个绘图设备上都可以润色图形。绘图设备包括组件、像素映射、图形文件和打印机,相同的代码可以用在4种不同类型的设备上。QPa
5、inter类支持复杂的同等系统的转换,很容易在所有平台上画旋转文本和像素映射11、绘制2D/3D图形功能Qt提供了QGLWidget类,使用该类能够绘制2D/3D图形。用QGLWidget就像用一个Qt组件一样方便。这比纯粹的用OpenGL做的3D图形更好使用。QT使用环境配置使用环境配置1、新建QTApplication工程2、选择X64运行平台3、在QT5ProjectSettings中选择对应的vs版本4、尝试运行,成功则说明环境配置成功QT程序实例程序实例MenuBarMenuBarToolBarToolBarStatusBarStatusBarGroup1:Group1:图图像像显显
6、示区域示区域Group3:Group3:选择选择按按钮测试钮测试区域区域Group2:Group2:文字文字测试测试区域区域MenuBar:ToolBar:中心组件:图像显示组:选择功能组件:文字功能组件:StatusBar:QT进进阶:信号和槽阶:信号和槽QT的消息响应机制信号和槽Qt部件不同于其他用户交互方式的GUI工具包。用户交互方式是所有GUI(Graphicaluserinterface)应用程序关心的问题。通过将某种用户事件(比如按下鼠标)与程序事件(比如退出程序)联系起来,使用户能够在图形界面中只使用鼠标来控制程序。而其他工具包是利用回调函数来进行用户交互的。回调回调是指:你自己
7、定义一个函数,并告诉系统何时为何调用。你可以写一个特定数量和类型参数的函数,然后告诉系统何时使用,并传递给它所需的参数,系统就会调用你定义的函数,处理参数,并给你返回值。回调函数只能是全局函数,或者是静态函数,因为这个函数只是在类中使用,所以为了维护类的完整性,我们用类的静态成员函数来做回调函数。QT的主要通信机制信号和槽回调有两个主要缺点:回调有两个主要缺点:1它们不是类型安全的。我们从来都不能确定处理函数使用了正确的参数来调用回调。2回调和处理函数是非常强有力的联系在一起的,因为处理函数必须要知道调用哪个回调。QT的主要通信机制信号和槽Qt的开发者使用另一种方法来完成这一工作。这种方法依赖
8、于Qt特有的两个功能,信号和槽。使用这种新方法是非常简单的,只需要编写一行代码就能够将用户事件和程序事件连接起来。这种将用户事件连接到程序事件的方法要比回调函数,更加容易使用的两个重要原因是:1槽和信号是你调用Qt库中的函数。2信号和槽不使用其他工具包。QT的主要通信机制信号和槽QT的主要通信机制信号和槽信号信号/槽机制是在槽机制是在QObjectQObject类中实现的。在类中实现的。在QObjectQObject类或类或者其一个子类者其一个子类(比如:比如:QWidgetQWidget类类)继承的所有类中,都继承的所有类中,都存在了信号和槽。存在了信号和槽。当对象改变其状态的时候,信号被发
9、送,对象不关心有没有其他对象接收到这个信号。槽是类的正常成员函数,可以将信号和槽通过connect()函数任意连接。当一个信号被发射,它所连接的槽会被立即执行,如同一个普通函数调用一样。QT的主要通信机制信号和槽槽槽当信号被发出时,会调用与之相连接的槽。槽是普通的C+函数,可以用普通的方式来调用。它唯一特殊的地方在于可以与信号相连接。槽的参数不能有默认值槽的参数不能有默认值。同样,信号的参数也不能有默认值信号的参数也不能有默认值。在槽的参数中在槽的参数中尽量不使用自定义的数据类型,尽量不使用自定义的数据类型,因为这样将会使通用性降低。既然槽和普通的成员函数差不多,它们和普通成员函数一样有访问限
10、制,根据槽的访问限制谁可以与它们相连接,能够分为以下三种情况。QT的主要通信机制信号和槽publicslot:publicslot:任何信号都可以与之相连接。这在窗口部件编程中非常有用,用于创建一些对彼此一无所知的对象,只有通过信号和槽来交换信息。publicslot就像是标准的铁路一样。protectedslot:protectedslot:只有该类及其子类所派生的对象的信号才可以与之相连接。这类槽的目的通常是为了类的完善,而不是类与外界的接口。privateslot:privateslot:只有该类自己的信号才可以与之相连接。当然还可以将定义为当然还可以将定义为virtual,这将非常有用
11、。,这将非常有用。QT的主要通信机制信号和槽信号信号当某个信号对其客户或所有者发生的内部状态发生改变,信当某个信号对其客户或所有者发生的内部状态发生改变,信、号被一个对象发射。号被一个对象发射。只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号-槽机制完全独立于任何GUI事件循环。只有当所有的槽返回以后发射函数(emit)才返回。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。如果有两个不同的对
12、象对一个信号感兴趣,只要将如果有两个不同的对象对一个信号感兴趣,只要将该信号连接到这两个对象的槽上就可以了该信号连接到这两个对象的槽上就可以了QT的主要通信机制信号和槽信号定义语法:class SenderClassQ_OBJECT .signals:void newName(QString&name);QT的主要通信机制信号和槽以下是创建槽,并把它和信号相连接的方法:与信号一样,槽需要在类定义的上部加入Q_OBJECT宏:class ReceiverClass Q_OBJECT向类定义中加入槽方法的原型。这个原型必须与它将要接收的信号一样(也就是说,具有同样的一套参数)。由于槽是方法,所以,
13、在作为槽使用的同时,也可以被直接调用。槽的方法可以设置成为公有的属性。public slots:void nameChanged(QString&name);QT的主要通信机制信号和槽 可以按照以下的方式调用connect()方法:connect(sender,SIGNAL(newName(QString&),this,SLOT(nameChanged(QString&);注 意:前两个参数指定信号的来源,后两个参数指定目标槽。宏SIGNAL()和SLOT()都需要完整的方法原型,原型必须遵循,用来调用一种方法的参数必须和该种方法可以使用的参数保持一致。直到槽方法返回,你编写的程序才能继续执行。通常应当保持在槽方法内部的处理过程中尽可能的简单,这样才不会因此中止信号的发送。发送信号的可能是用户接口过程,操作过程表现得比较慢或者缓慢。为确认按钮添加回调函数:谢谢大家谢谢大家!结束结束