QT编程基础课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《QT编程基础课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT 编程 基础 课件
- 资源描述:
-
1、 2011 SCCASVIS中国科学院计算机网络信息中心中国科学院计算机网络信息中心 超超 算算 中中 心心Supercomputing Center, C N I C, C A SLINUX 高级编程QtQt程序开发入门程序开发入门田东QT 基础编程 2011 SCCASVIS2QT 基础编程 2011 SCCASVIS3QT 基础编程 2011 SCCASVIS4QT 基础编程 2011 SCCASVIS5QT 基础编程 2011 SCCASVIS6QT 基础编程 2011 SCCASVIS7QT 基础编程 2011 SCCASVIS8QT 基础编程 2011 SCCASVIS9QT 基础
2、编程 2011 SCCASVIS10内容提纲Qt 程序设计基础Qt开发环境的建立Qt界面DesignerQt 程序开发流程QT 基础编程 2011 SCCASVIS11第一部分: Qt程序设计基础QT 基础编程 2011 SCCASVIS12Qt简介 Qt是Trolltech公司的标志性产品,是一个跨平台的C+图形用户界面(GUI)工具包 Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置 Qt/Windows (Windows XP, 2000, NT 4, Me/98) Qt/Mac (Mac OS X) Qt/X11 (Lin
3、ux, Solaris, HP-UX, IRIX, AIX等) Qt对不同平台的专门API进行了专门的封装(文件处理,网络等) QT 基础编程 2011 SCCASVIS13Trolltech的双重授权模式Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权QT 基础编程 2011 SCCASVIS14Qt特征(一)面向对象Qt具有模块设计和注重软件构件或元素的可重用行的特点构件支持Qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程友好的
4、联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。并且对于初学者,其中的指南将一步步介绍如何进行Qt编程QT 基础编程 2011 SCCASVIS15Qt特征(二)便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题用户自定义使用其他的一些工具包经常会遇到这样一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的行为国际化Qt为本地化应用提供了完全的支持,所有用户界
5、面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准 QT 基础编程 2011 SCCASVIS16Qt特征(三)丰富的API函数Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件QT 基础编程 2011 SCCASVIS17Qt编程特点1.初始化在Qt应用程序中,首先要创建一
6、个QApplication对象,QApplication类负责图形用户界面应用程序的控制流和主设置,在main.cpp中定义如下:int main(int argc, char *argv) QApplication a(argc, argv); QT 基础编程 2011 SCCASVIS181.初始化QApplication包含在main()函数的事件循环体中,对所有来自Window系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束,并且提供会话管理。在Qt应用程序中,不管有多少个窗口,QApplication对象只能有一个,而且必须在其他对象之前创建。QApplicat
7、ion类中封装了很多函数,其中包括: 系统设置:setFont() 用来设置字体 事件处理:sendEvent() 用来发送事件 GUI风格:setStyles() 设置图形用户界面的风格 颜色使用:colorSpec() 用来返回颜色文件 文本处理:translate() 用来处理文本信息 创建组件:setmainWidget() 用来设置窗口的主组件 QT 基础编程 2011 SCCASVIS192.窗口的创建在Qt程序中,创建窗口比较简单,只要在main.cpp文件中为ApplicationWindow建立一个指针:ApplicationWindow *mw = new Applicat
8、onWindow();ApplicationWindow是在Application.h中定义的类,它是一个QmainWindow的继承类组件的创建需要调用相应组件的类,并在头文件中包含此类的头文件或者创建自定义类,继承以后组件类的功能#include “qpushbutton.h”3.组件的创建QT 基础编程 2011 SCCASVIS203.组件的创建class hello:public Qwidgethello类继承了Qwidget类的特征,并加入了自定义的特征功能,同样需要在头文件中包含此类的头文件在main.cpp的函数中需要创建hello类的实例,或创建QPushButton类的实例
9、,才可以使用hello h(string);QPushButton hello(“Hello,world!”,0);如果组件本身可以作为主窗口,则无需设置主窗口。在上例中,下压按钮创建时其构造函数中的第二个参数为0,表示按钮所在窗口为主窗口,不需要设置主窗口。否则需要调用QWidget成员函数setMainWidget()来进行设置QT 基础编程 2011 SCCASVIS213.组件的创建h.setMainWidget(&h);组件创建时一般是不可见的,这样的好处在于避免大量组件创建时造成的屏幕闪烁现象,要使组件可见需要调用QWidget类的成员函数show()来显示组件h.show();在
10、X程序中,敲击键盘,鼠标指针在窗口中的移动或鼠标按键动作等,都是事件在Xt中提供了提供了一种叫做回调的事件处理方式。它通过翻译表,将事件映射为相应的动作,当组件得到事件通知,就去表中找出相应的动作例程进行处理。这种机制需要应用程序注册有关组件的回调函数或普通的事件处理函数,以分发循环Xt的事件4.事件QT 基础编程 2011 SCCASVIS22Qt事件的处理过程:QApplication的事件循环体从事件队列中拾取本地窗口系统事件或其他事件,译成QEvent(),并送给QObject:event(),最后送给QWidget:event()本别对事件处理4.事件QApplicationQWid
11、get:event() QEventQObject:event()Y 等待事件 读取事件 检查事件类型 处理事件 退出事件处理循环事件处理循环部分NQT 基础编程 2011 SCCASVIS234.事件其实在Qt程序中,事件处理的方式也是回调,但与以往所不同的是,事件的发出和接收采用了信号(signal)和插槽(slot)机制,无须调用翻译表。利用信号和插槽进行对象间的通信是Qt的最主要特征之一当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signalsignal和slot机制真正实现了封装
12、的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。QT 基础编程 2011 SCCASVIS24Signal和Slot的声明(一)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:class Student : public QObject Q_OBJECTpublic: Student() myMark = 0; int mark() const return myMark; public slots: void setMark(i
13、nt newMark);signals: void markChanged(int newMark);private: int myMark;QT 基础编程 2011 SCCASVIS25Signal和Slot的声明(二)signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signalvoid Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); QT 基础编程 2011 SCCASVIS26Signal
14、和Slot的连接(一)在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal函数原形如下:bool connect ( const QObject * sender, const char * signal, const char * member ) const其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件QT 基础编程 2011 SCCASVIS27Signal和Slot的连接(二)在使用connect()函数进
15、行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar;QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) ); QT 基础编程 2011 SCCASVIS28Signal和Slot的连接方式(一)QT 基础编程 2011 SCCASVIS29Signal和Slot的连接方式(二)同一个信号连接多个插槽connect(slider, SIGNAL(va
16、lueChanged(int),spinBox, SLOT(setValue(int);connect(slider,SIGNAL(valueChanged(int),this,SLOT(updateStatusBarIndicator(int);多个信号连接到同一个插槽connect(lcd, SIGNAL(overflow(),this, SLOT(handleMathError();connect(calculator, SIGNAL(divisionByZero(),this, SLOT(handleMathError();QT 基础编程 2011 SCCASVIS30Signal和S
17、lot的连接方式(三)一个信号连接到另一个信号connect(lineEdit, SIGNAL(textChanged(const QString &), this, SIGNAL(updateRecord(const QString &);取消一个连接disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接QT 基础编程 2011 SCCASVIS31退出事件程序退出事件程序,只需要在程序结束时返回一个exec(),例如:return a.e
18、xec();其中a为QApplication的实例,当调用exec()将进入主事件的循环中,直到exit()被调用或主窗口部件被销毁QT 基础编程 2011 SCCASVIS32整个Qt应用程序的执行过程 初始化 处理事件 结束Qt应用程序Qt 库请求队列事件队列X server设备相关层计算机键盘鼠标屏幕QT 基础编程 2011 SCCASVIS333个主要的基类1.QObjectQObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下:QObject:QObject ( QObject * parent =0,const char * name = 0 ) 创建
19、带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。比如,对话框是其中的ok和cancel按钮的父对象。在上面的函数中如果parent为0则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的敞口。QT 基础编程 2011 SCCASVIS34QObject类(一)class Mandelbrot:public QObjectQ_OBJECT /需要使用需要使用signalsignal和和slotslotpublic : :Mandelbrot(QObect *parent=0, const char *name);public slots:void start();sig
20、nals:void done();private slots:void calculate();private:QTimer timer;;QT 基础编程 2011 SCCASVIS35QObject类(二)/构造初始化一个Mandelbrot对象Mandelbrot:Mandelbrot(QObject *parent=0, const char *name):QObject(parent, name)connect(&timer,SIGNAL(timeout(),SLOT(calculate();QT 基础编程 2011 SCCASVIS363个主要的基类2. QApplicationQA
21、pplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的QApplication和QWidget都是QObject类的子类QT 基础编程 2011 SCCASVIS37函数分组函数分组 系统设置 desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInter
22、val()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。 事件处理 exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。 sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilte
展开阅读全文