Qt程序开发入门

上传人:人*** 文档编号:569980887 上传时间:2024-08-01 格式:PPT 页数:54 大小:1.17MB
返回 下载 相关 举报
Qt程序开发入门_第1页
第1页 / 共54页
Qt程序开发入门_第2页
第2页 / 共54页
Qt程序开发入门_第3页
第3页 / 共54页
Qt程序开发入门_第4页
第4页 / 共54页
Qt程序开发入门_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《Qt程序开发入门》由会员分享,可在线阅读,更多相关《Qt程序开发入门(54页珍藏版)》请在金锄头文库上搜索。

1、 2006 博创科技北北 京京 博博 创创 兴兴 业业 科科 技技 有有 限限 公公 司司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co . , LTD博创科技 嵌入互动QtQt程序开发入门程序开发入门北京博创兴业科技有限公司博创科技 嵌入互动 2006 博创科技第一部分: Qt基础程序设计基础博创科技 张笑天zhangxt_2博创科技 嵌入互动 2006 博创科技Qt简介Qt是Trolltech公司的标志性产品,是一个跨平台的C+图形用户界面(GUI)工具包Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应

2、用开发与配置 Qt/Windows(Windows XP, 2000, NT 4, Me/98) Qt/Mac(Mac OS X) Qt/X11(Linux, Solaris, HP-UX, IRIX, AIX等) Qt对不同平台的专门API进行了专门的封装(文件处理,网络等) 3博创科技 嵌入互动 2006 博创科技Trolltech的双重授权模式Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权4博创科技 嵌入互动 2006 博创科技Qt特征(一)面向对象Qt具有模块设计和注重软件构件或元素的可重用行的特点构件支持Qt提供信号(signal)和插槽(sl

3、ot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程友好的联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。并且对于初学者,其中的指南将一步步介绍如何进行Qt编程5博创科技 嵌入互动 2006 博创科技Qt特征(二)便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题用户自定义使用其他的一些工具包经常会遇到这样一种情况,没有真正适合需求的组件,声称自定义的组件对用

4、户来说就像一个黑匣子。而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的行为国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准 6博创科技 嵌入互动 2006 博创科技Qt特征(三)丰富的API函数Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业

5、外观的用户界面所需要的所有组件7博创科技 嵌入互动 2006 博创科技Qt编程特点1.初始化在Qt应用程序中,首先要创建一个QApplication对象,QApplication类负责图形用户界面应用程序的控制流和主设置,在main.cpp中定义如下:intmain(intargc,char*argv)QApplicationa(argc,argv); 8博创科技 嵌入互动 2006 博创科技1.初始化QApplication包含在main()函数的事件循环体中,对所有来自Window系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束,并且提供会话管理。在Qt应用程序中,不

6、管有多少个窗口,QApplication对象只能有一个,而且必须在其他对象之前创建。QApplication类中封装了很多函数,其中包括: 系统设置:setFont() 用来设置字体 事件处理:sendEvent() 用来发送事件 GUI风格:setStyles() 设置图形用户界面的风格 颜色使用:colorSpec() 用来返回颜色文件 文本处理:translate() 用来处理文本信息 创建组件:setmainWidget() 用来设置窗口的主组件 9博创科技 嵌入互动 2006 博创科技2.窗口的创建在Qt程序中,创建窗口比较简单,只要在main.cpp文件中为ApplicationW

7、indow建立一个指针:ApplicationWindow*mw=newApplicatonWindow();ApplicationWindow是在Application.h中定义的类,它是一个QmainWindow的继承类组件的创建需要调用相应组件的类,并在头文件中包含此类的头文件或者创建自定义类,继承以后组件类的功能#include“qpushbutton.h”3.组件的创建10博创科技 嵌入互动 2006 博创科技3.组件的创建classhello:publicQwidgethello类继承了Qwidget类的特征,并加入了自定义的特征功能,同样需要在头文件中包含此类的头文件在main.

8、cpp的函数中需要创建hello类的实例,或创建QPushButton类的实例,才可以使用helloh(string);QPushButtonhello(“Hello,world!”,0);如果组件本身可以作为主窗口,则无需设置主窗口。在上例中,下压按钮创建时其构造函数中的第二个参数为0,表示按钮所在窗口为主窗口,不需要设置主窗口。否则需要调用QWidget成员函数setMainWidget()来进行设置11博创科技 嵌入互动 2006 博创科技3.组件的创建h.setMainWidget(&h);组件创建时一般是不可见的,这样的好处在于避免大量组件创建时造成的屏幕闪烁现象,要使组件可见需要调

9、用QWidget类的成员函数show()来显示组件h.show();在X程序中,敲击键盘,鼠标指针在窗口中的移动或鼠标按键动作等,都是事件在Xt中提供了提供了一种叫做回调的事件处理方式。它通过翻译表,将事件映射为相应的动作,当组件得到事件通知,就去表中找出相应的动作例程进行处理。这种机制需要应用程序注册有关组件的回调函数或普通的事件处理函数,以分发循环Xt的事件4.事件12博创科技 嵌入互动 2006 博创科技Qt事件的处理过程:QApplication的事件循环体从事件队列中拾取本地窗口系统事件或其他事件,译成QEvent(),并送给QObject:event(),最后送给QWidget:e

10、vent()本别对事件处理4.事件QApplicationQWidget:event() QEventQObject:event()Y 等待事件 读取事件 检查事件类型 处理事件 退出事件处理循环事件处理循环部分N13博创科技 嵌入互动 2006 博创科技4.事件其实在Qt程序中,事件处理的方式也是回调,但与以往所不同的是,事件的发出和接收采用了信号(signal)和插槽(slot)机制,无须调用翻译表。利用信号和插槽进行对象间的通信是Qt的最主要特征之一当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要

11、接收怎样的signalsignal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。14博创科技 嵌入互动 2006 博创科技Signal和Slot的声明(一)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:classStudent:publicQObjectQ_OBJECTpublic:Student()myMark=0;intmark()constreturnmyMark;publicslots:vo

12、idsetMark(intnewMark);signals:voidmarkChanged(intnewMark);private:intmyMark;15博创科技 嵌入互动 2006 博创科技Signal和Slot的声明(二)signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signalvoidStudent:setMark(intnewMark)if(newMark!=myMark)myMark=newMark;emitmarkChanged(myMark);16博创科技 嵌入互动 2006 博创科技Signal和Slot的连接(一

13、)在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal函数原形如下:boolconnect(constQObject*sender,constchar*signal,constchar*member)const其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件 17博创科技 嵌入互动 2006 博创科技Signal和Slot的连接(二)在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()

14、这两个宏,使用方法如下:QLabel*label=newQLabel;QScrollBar*scroll=newQScrollBar;QObject:connect(scroll,SIGNAL(valueChanged(int),label,SLOT(setNum(int); 18博创科技 嵌入互动 2006 博创科技Signal和Slot的连接方式(一)19博创科技 嵌入互动 2006 博创科技Signal和Slot的连接方式(二)同一个信号连接多个插槽connect(slider,SIGNAL(valueChanged(int),spinBox,SLOT(setValue(int);con

15、nect(slider,SIGNAL(valueChanged(int),this,SLOT(updateStatusBarIndicator(int);多个信号连接到同一个插槽connect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError();20博创科技 嵌入互动 2006 博创科技Signal和Slot的连接方式(三)一个信号连接到另一个信号connect(lineEdit,SIGNAL(textCh

16、anged(constQString&),this,SIGNAL(updateRecord(constQString&);取消一个连接disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接21博创科技 嵌入互动 2006 博创科技退出事件程序退出事件程序,只需要在程序结束时返回一个exec(),例如:returna.exec();其中a为QApplication的实例,当调用exec()将进入主事件的循环中,直到exit()被调用或主窗口部件

17、被销毁22博创科技 嵌入互动 2006 博创科技整个Qt应用程序的执行过程 初始化 处理事件 结束Qt应用程序Qt 库请求队列事件队列X server设备相关层计算机键盘鼠标屏幕23博创科技 嵌入互动 2006 博创科技3个主要的基类1.QObjectQObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下:QObject:QObject(QObject*parent=0,constchar*name=0)创建带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。比如,对话框是其中的ok和cancel按钮的父对象。在上面的函数中如果parent为0则构造

18、一个无父的对象,如果对象是一个组件,则它就会成为顶层的敞口。24博创科技 嵌入互动 2006 博创科技QObject类(一)classMandelbrot:publicQObjectQ_OBJECT/需要使用需要使用signalsignal和和slotslotpublic : :Mandelbrot(QObect*parent=0,constchar*name);publicslots:voidstart();signals:voiddone();privateslots:voidcalculate();private:QTimertimer;;25博创科技 嵌入互动 2006 博创科技QOb

19、ject类(二)/构造初始化一个Mandelbrot对象Mandelbrot:Mandelbrot(QObject*parent=0,constchar*name):QObject(parent,name)connect(&timer,SIGNAL(timeout(),SLOT(calculate();26博创科技 嵌入互动 2006 博创科技3个主要的基类2. QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对

20、于一个应用程序来说,建立此类的对象是必不可少的QApplication和QWidget都是QObject类的子类27博创科技 嵌入互动 2006 博创科技函数分组函数分组 系统设置 desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、set

21、Font()、fontMetrics()。 事件处理 exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。 sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。 图形用户界面风格 style()、setStyle()、pol

22、ish()。 颜色使用 colorSpec()、setColorSpec()、qwsSetCustomColors()。 文本处理 setDefaultCodec()、installTranslator()、removeTranslator()、translate()。 窗口部件 mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow

23、()、widgetAt()。 高级光标处理 hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。 X窗口系统同步 flushX()、syncX()。 对话管理 isSessionRestored()、sessionId()、commitData()、saveState()。 线程 lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。 杂项 closeAllWindows()

24、、startingUp()、closingDown()、type()。 28博创科技 嵌入互动 2006 博创科技3个主要的基类3. QWidgetQWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类29博创科技 嵌入互动 2006 博创科技上下文上下文 函数函数 窗口函数 show()、hide()、raise()、lower()、cl

25、ose()。 顶级窗口 caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。 窗口内容 update()、repaint()、erase()、scroll()、updateMask()。 几何形状 pos()、size()、rect()、x()、y()、width()、height()、sizePolicy()、setSize

26、Policy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize(

27、)、setFixedSize()。 模式 isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。 观感 style()、setStyle()、cursor()、setCursor()、font()、setFont()、pal

28、ette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。 键盘焦点函数 isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。 鼠标和键盘捕获 grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、

29、keyboardGrabber()。 事件处理器 event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()

30、、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。 变化处理器 enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。 系统函数 parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。 这是什么的帮助 customWhatsThis()。 内部核心函数 focusNextPr

31、evChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。 30博创科技 嵌入互动 2006 博创科技一个完整的Qt程序1#include2#include3intmain(intargc,char*argv)45QApplicationapp(argc,argv);6QLabel*hello=newQLabel(HelloQt/Embedded!,0);7app.setMainWidget(hello);8hello-show();9returnapp.exec();1031博创科技 嵌入互动 2006 博创

32、科技第二部分:Qt Designer32博创科技 嵌入互动 2006 博创科技Qt DesignerQt应用程序除了使用手工编写代码的方式外,还可以用过Qt Desinger来完成,Qt Designer的功能十分强大,界面类似于我们常用的VB,而且还提供了大量可供编程使用的组件33博创科技 嵌入互动 2006 博创科技34博创科技 嵌入互动 2006 博创科技基于Qt Designer程序设计(一)在使用Qt Designer程序开发时,一般要涉及到下面几个步骤:1.创建和初始化子部件2.设置子部件布局3.设置Tab键次序(不是必须)4.建立信号与插槽的连接35博创科技 嵌入互动 2006

33、博创科技基于Qt Designer程序设计(二)1.创建并布置部件2.对部件使用布局管理3.建立信号与插槽的连接36博创科技 嵌入互动 2006 博创科技基于Qt Designer程序设计(三) 编辑两个部件之间信号与插槽之间的连接方式37博创科技 嵌入互动 2006 博创科技基于Qt Designer程序设计(四)Qt Designer下不同风格的预览38博创科技 嵌入互动 2006 博创科技Qt Designer的工作过程Qt Designer将工程文件组织成.ui的文件由.ui文件生成.cpp 和 .h文件.ui -xmluic生成moc_filenaem.cppmoc39博创科技 嵌入

34、互动 2006 博创科技Qt Designer 功能框图40博创科技 嵌入互动 2006 博创科技子类继承方式(Qt 2.X)41博创科技 嵌入互动 2006 博创科技第三部分:Qt 开发环境的建立42博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(一)在我们嵌入式开发中Qt提供了使用在小型嵌入式设备上的轻量级的工具包Qt/Embedded(Qt/E),要使用Qt/E需要和Qt/X11以及tmake工具进行配合,我们可以在Trolltech公司的ftp站点下载到这些工具包的源代码ftp:/ 这里列出这些工具包的一个可用的组合Qt/Embedded 2.3.10 Qt

35、2.3.2 for X11 tmake 1.13 43博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(二)解压缩并设置环境变量安装tmakecd/pxa270Qttarxzftmake-1.13.tar.gzexportTMAKEDIR=$PWD/tmake-1.13安装Qt 2.3.2cd/pxa270Qttarxzfqt-x11-2.3.2.tar.gzexportQT2DIR=$PWD/qt-2.3.2安装Qt/E 2.3.10cd/pxa270Qttarxzfqt-embedded-2.3.10-free.tar.gzexportQTEDIR=$PWD/qt-

36、2.3.1044博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(三)编译Qt/Embedded库的时候需要注意,我们通常是要将库源码编译两次。一次是为了使我们的程序能够在pc机上显示出来而编译的为pc机上的程序使用的Qt/E库;另一次是编译在开发板上使用的库,是为开发板上的应用程序准备的库文件以编译pc机上的Qt/E库为例,编译Qt/E的过程主要分为三步,分别是编译Qt 2.3.2 ,编译qvfb,编译Qt/Embedded 2.3.1045博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(四)编译Qt 2.3.2cd$QT2DIRexport

37、TMAKEPATH=$TMAKEDIR/lib/linux-g+exportQTDIR=$QT2DIRexportPATH=$QTDIR/bin:$PATHexportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure-no-xftmakemkdir$QTEDIR/bincpbin/uic$QTEDIR/bin/46博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(五)编译qvfbexportTMAKEPATH=$TMAKEDIR/lib/linux-g+exportQTDIR=$QT2DIRexportPATH

38、=$QTDIR/bin:$PATHexportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHcd$QTEDIR/tools/qvfbtmake-oMakefileqvfb.promakemvqvfb$QTEDIR/bin/47博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(六)编译Qt/E 2.3.10cd$QTEDIRexportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g+exportQTDIR=$QTEDIRexportPATH=$QTDIR/bin:$PATHexportLD_LIBRA

39、RY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure-no-xft-qvfb-depths4,8,16,32make48博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(六)在qvfb上显示Qt程序cd$QTEDIR/examples/launcherexportQTDIR=$QTEDIRexportPATH=$QTEDIR/bin:$PATHexportLD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATHqvfb-width640-height480&sleep10./

40、launcher-qws49博创科技 嵌入互动 2006 博创科技建立Qt/Embedded开发环境(六)编译在开发板上运行的Qt/E库cd$QTEDIRexportTMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g+exportQTDIR=$QTEDIRexportPATH=$QTDIR/bin:$PATHexportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure-xplatformlinux-arm-g+-no-xft-no-qvfb-depths4,8,16,32make50博创科技 嵌入互动 20

41、06 博创科技第四部分:Qt 程序开发流程51博创科技 嵌入互动 2006 博创科技一个完整的Qt程序开发过程(一)以使用Qt Designer为例1. 通过designer设计并保存工程为.ui文件2. 使用uic工具生成源代码uicofilename.hfilename.uiuicofilename.cpp-implfilename.hfilename.ui3.使用progen工具生成.pro工程文件progentapp.tofilename.pro4.手工编写一个main.cpp文件 52博创科技 嵌入互动 2006 博创科技一个完整的Qt程序开发过程(二)5. 指定tmake路径本机编译TMAKEPATH=/tmake的安装路径(如的安装路径(如$TMAKEDIR)/lib/qws/linux-x86-g+交叉编译TMAKEPATH=/tmake的安装路径(如的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g+6.通过tmake自动生成Makefile文件 tmakeoMakefileprogressbar.pro 7. make生成可执行文件53博创科技 嵌入互动 2006 博创科技54

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号