诺基亚公司Qt嵌入式开发.ppt

上传人:wuy****n92 文档编号:86941220 上传时间:2023-04-15 格式:PPT 页数:59 大小:2.71MB
返回 下载 相关 举报
诺基亚公司Qt嵌入式开发.ppt_第1页
第1页 / 共59页
诺基亚公司Qt嵌入式开发.ppt_第2页
第2页 / 共59页
点击查看更多>>
资源描述

《诺基亚公司Qt嵌入式开发.ppt》由会员分享,可在线阅读,更多相关《诺基亚公司Qt嵌入式开发.ppt(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14大连东软信息学院大连东软信息学院 嵌入式系统导论课程组嵌入式系统导论课程组嵌入式系统嵌入式系统Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14第6章 Qt图形界面应用程序开发6.1 Qt简介6.2 Qt4 Designer的应用6.3 Qt4与数据库6.4 Qt/EmbeddedNeusoft Institute of Information14 四月 20

2、23IT Education&Training2023/4/146.1 Qt简介6.1.1 Qt的介绍6.1.2 Qt中主要的类6.1.3 信号和槽6.1.4 Qt的帮助文档6.1.5 Qt4的特点和优势6.1.6 Qt4的安装与配置6.1.7 Qt4程序结构及示例Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.1 Qt的简介Qt是挪威Trolltech公司出品的一个跨平台的C+图形用户界面库。Trolltech公司目前开发两种产品:一种是跨平台的图形界面设计平台,即Qt。一种是提供给嵌入式

3、系统的应用程序开发平台,可以应用到PDA,手机等手持设备上,即Qtopia,是基于FrameBuffer的Qt/Embedded。Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Trolltech的双重授权模式Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.1 Qt的简介Qt 同 X Window 上的Motif

4、,Openwin,GTK 等图形界面库,和Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有很多优点。(1)Qt有优良的跨平台性,可支持的操作系统有。(2)Unix、Linux、Solaris、SunOS等X11平台;(3)Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP;(4)Mac OSX、HP-UX、QNX、FressBSD等;(5)MIPS、ARM、StrongARM、Motorola 68000、PowerPC和XScale等支持FrameBuffer的嵌入式处理器上。Neu

5、soft Institute of Information14 四月 2023IT Education&Training2023/4/14Qt特征(一)面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号(signal)和插槽(slot)概念,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程友好的联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程Neusoft Institute of Information14 四月 2023

6、IT Education&Training2023/4/14Qt特征(二)便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准 Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Qt特征(三)丰富的API函数Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C

7、+类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.2 Qt中主要的类1.QObjectQObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下:QObject:QObject(QObject*p

8、arent=0,constchar*name=0)在上面的函数中如果parent为0则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的窗口。Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14QObject类(一)classMandelbrot:publicQObjectQ_OBJECT/需要使用需要使用signal和和slotpublic:Mandelbrot(QObect*parent=0,constchar*name);publicslots:voidstart();signals:vo

9、iddone();privateslots:voidcalculate();private:QTimertimer;;Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14QObject类(二)/构造初始化一个Mandelbrot对象Mandelbrot:Mandelbrot(QObject*parent=0,constchar*name):QObject(parent,name)connect(&timer,SIGNAL(timeout(),SLOT(calculate();Neusoft Instit

10、ute of Information14 四月 2023IT Education&Training2023/4/146.1.2 Qt中主要的类2.QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始、结束以及会话管理。对于一个应用程序来说,建立此类的对象是必不可少的QApplication是QObject类的子类Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14函数分组函数分组 系

11、统设置 desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。事件处理 exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()

12、。sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。图形用户界面风格 style()、setStyle()、polish()。颜色使用 colorSpec()、setColorSpec()、qwsSetCustomColors()。文本处理 setDefaultCodec()、installT

13、ranslator()、removeTranslator()、translate()。窗口部件 mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。高级光标处理 hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOv

14、errideCursor()、restoreOverrideCursor()。X窗口系统同步 flushX()、syncX()。对话管理 isSessionRestored()、sessionId()、commitData()、saveState()。线程 lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。杂项 closeAllWindows()、startingUp()、closingDown()、type()。Neusoft Institute of Information14 四月 2023IT Education&Training

15、2023/4/146.1.2 Qt中主要的类3.QWidgetQWidget类是所有用户接口对象(组建)的基类,它继承了QObject类的属性组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类QWidget是QObject类的子类Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14上下文上下文 函数函数 窗口函数 sho

16、w()、hide()、raise()、lower()、close()。顶级窗口 caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。窗口内容 update()、repaint()、erase()、scroll()、updateMask()。几何形状 pos()、size()、rect()、x()、y()、width()、hei

17、ght()、sizePolicy()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSi

18、zeIncrement()、setBaseSize()、setFixedSize()。模式 isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。观感 style()、setStyle()、cursor()、setCurso

19、r()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。键盘焦点函数 isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。鼠标和键盘捕获 grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyb

20、oard()、mouseGrabber()、keyboardGrabber()。事件处理器 event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEv

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

22、部核心函数 focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.3 信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其他工具包最不相同的部分。在图形用户界面编程中,经常会出现窗口中的一个部件发生的变化会被通知给另一个部件,在Qt中采用信号和槽来实现对象部件之间的通信。Neusoft Institute of Information1

23、4 四月 2023IT Education&Training2023/4/14Signal和Slot的声明(一)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:classStudent:publicQObjectQ_OBJECTpublic:Student()myMark=0;intmark()constreturnmyMark;publicslots:voidsetMark(intnewMark);signals:voidmarkChanged(intnewMark);private:intmyM

24、ark;Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Signal和Slot的声明(二)signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在事件处理结束后发出signalvoidStudent:setMark(intnewMark)if(newMark!=myMark)myMark=newMark;emitmarkChanged(myMark);Neusoft Institute of Information14 四月 2023IT Education&Trai

25、ning2023/4/14Signal和Slot的连接(一)在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal函数原形如下:boolconnect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*slot)其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件 Neusoft Institute of Information14 四

26、月 2023IT Education&Training2023/4/14Signal和Slot的连接(二)在使用connect()函数进行连接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:QLabel*label=newQLabel;QScrollBar*scroll=newQScrollBar;QObject:connect(scroll,SIGNAL(valueChanged(int),label,SLOT(setNum(int);Neusoft Institute of Information14 四月 2023IT Education&Training2023

27、/4/14Signal和Slot的连接方式(一)Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Signal和Slot的连接方式(二)同一个信号连接多个插槽connect(slider,SIGNAL(valueChanged(int),spinBox,SLOT(setValue(int);connect(slider,SIGNAL(valueChanged(int),this,SLOT(updateStatusBarIndicator(int);多个信号连接到同一个插槽connect(lcd,SIG

28、NAL(overflow(),this,SLOT(handleMathError();connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError();Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Signal和Slot的连接方式(三)一个信号连接到另一个信号connect(lineEdit,SIGNAL(textChanged(constQString&),this,SIGNAL(updateRecord(constQS

29、tring&);取消一个连接disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.4 Qt的帮助文档Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.5 Qt4的特点和优势Qt4较以前的版本,

30、有了较大的改进,具体特点及优势如下:Qt4中,所有的头文件(.h)存放位置更规范,按照分类形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夹下,而不像之前的版本,所有的头文件都放在一起。Qt4增加了很多新的控件,但是对之前版本中的控件也有保留,只不过在命名上在类名前面加上Qt3。Qt4中界面的设计与逻辑功能分开,界面设计的头文件中不再包含任何用户自己写的代码,逻辑功能的实现在用户自己重新定义的类中实现,而这个重新定义的类是完成界面设计类的继承类。当用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面头文件覆盖原来的文件

31、即可。Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.6 Qt4的安装与配置1 解压压缩包 rootlocalhost home#tar zxvf qt-x11-opensource-src-4.3.2.tar.gz 2 配置并编译rootlocalhost qt-x11-opensource-src-4.3.2#./configure -no-opensslrootlocalhost qt-x11-opensource-src-4.3.2#gmakeNeusoft Institute of

32、 Information14 四月 2023IT Education&Training2023/4/146.1.6 Qt4的安装与配置3安装库文件rootlocalhost qt-x11-opensource-src-4.3.2#surootlocalhost qt-x11-opensource-src-4.3.2#gmake installQt默认被安装的路径为:。如果安装的时候需要更改安装的路径,可以加上-prefix 参数来指定安装路径。4设置环境变量 如果需要直接用Qt命令,那么需要设置环境变量PATH。具体操作为,如果你的shell是bash,ksh,zsh或sh,那么在.profi

33、le或.bash_profile文件中加上下面的信息。PATH=/usr/local/Trolltech/Qt-4.3.2/bin:$PATHexport PATH Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.1.7 Qt4程序结构及示例【程序6.5】helloworld.cpp文件内容。#include#include int main(int argc,char*argv)QApplication app(argc,argv);QLabel*label=new QLabel(Hello

34、World!);label-show();return app.exec();Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14编译及运行建立一个文件夹helloworld,把helloworld.cpp放到文件夹下qmake projectqmakemake./helloworldNeusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.2 Qt4 Designer的应用6.2.1 Qt Designer的应用

35、6.2.2 Qt中的控件及对话框类6.2.3 基于Qt Designer程序设计流程6.2.4 Qt应用程序实例Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.2.1 Qt Designer的应用Qt提供了非常强大的GUI编辑工具Qt Designer,它的操作界面类似于Windows下的Visual Studio,而且它还提供了相当多的部件资源。在编译Qt源码的时候,也同时生成了可执行程序designer。rootlocalhost sunjm#designerNeusoft Institut

36、e of Information14 四月 2023IT Education&Training2023/4/14Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.2.2 Qt中的控件及对话框类Qt提供了很多控件和常用的对话框,可以用在很多地方。主窗口控件:QMenuBar,QToolBar,QStatusBar布局相关的控件:QSplitter,QScrollArea四种方式按钮:QPushButton,QToolButton,QCheckBox,和 QRadioButton容器类控件:QFram

37、e,QToolBox,QLabel。滚动条:QAbstractScrollArea,是视图类和其他滚动控件的基类。显示信息的控件:QLabel,QTextBrowser。数据输入的控件:QLineEdit,QTextEdit。QLineEdit只可输入许可器允许的字符。QTextEdit是QAbstractScrollArea的子类,可以输入多行文本。程序的进行状态控件:QProgressDialog,QProgressBar。QInputDialog可以方便的让用户输入一行文本或者数字。Qt中还可以自定义控件,并集成到Qt Designer中。Neusoft Institute of Inf

38、ormation14 四月 2023IT Education&Training2023/4/146.2.3 基于Qt Designer程序设计流程1.创建和初始化子部件2.设置子部件布局3.设置Tab键次序(不是必须)4.建立信号与插槽的连接Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.2.3 基于Qt Designer程序设计流程1.创建并布置部件2.对部件使用布局管理4.建立信号与插槽的连接3.设置Tab键次序Neusoft Institute of Information14 四月 20

39、23IT Education&Training2023/4/146.2.3 基于Qt Designer程序设计流程 编辑两个部件之间信号与插槽之间的连接方式Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.2.3 基于Qt Designer程序设计流程Qt4 Designer将工程文件组织成.ui的文件以使用Qt Designer为例1.通过designer设计并保存工程为*.ui文件由.ui文件生成ui_*.h文件2.手工编写一个main.cpp文件3.手工编写*.cpp和*.h文件。4.使用q

40、make工具生成.pro工程文件qmake-project5.生成makefile文件qmake6.编译makeNeusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Qt Designer 功能框图Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.2.4 Qt应用程序实例QT应用程序实例应用程序实例计算器计算器 保存为test.ui文件,放到test文件夹下Neusoft Institute of Infor

41、mation14 四月 2023IT Education&Training2023/4/14生成ui_test.h头文件uic o ui_test.h test.ui具体代码参见ui_test.h代码Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14编写test.h文件#include#include ui_test.hclass Dialog:public QDialog,public Ui:DialogQ_OBJECTpublic:Dialog(QDialog*parent=0);private

42、slots:void val1();void val2();void val3();void add();void ok();private:double num1;double num2;bool flag;Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14编写test.cpp文件#include#include test.hDialog:Dialog(QDialog*parent)setupUi(this);num1=0;num2=0;flag=0;connect(Button1,SIGNAL(c

43、licked(),this,SLOT(val1();connect(Button2,SIGNAL(clicked(),this,SLOT(val2();connect(Button3,SIGNAL(clicked(),this,SLOT(val3();connect(Button_add,SIGNAL(clicked(),this,SLOT(add();connect(Button_ok,SIGNAL(clicked(),this,SLOT(ok();Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14

44、编写main.cpp#include#include#includetest.hint main(int argc,char*argv)QApplication app(argc,argv);Dialog *dialog=new Dialog;dialog-show();return app.exec();Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14编译及执行cd testqmake projectqmakemake./testNeusoft Institute of Information14

45、 四月 2023IT Education&Training2023/4/146.3 Qt4与数据库6.3.1 Qt4与数据库的连接6.3.2 执行SQL命令6.3.3 SQL模型Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14Qt4连接数据库的原理#includeQt4中提供了QtSql模块。为访问数据库提供了平台和相应的接口提供模型视图体系,来完成可视化的信息输入Neusoft Institute of Information14 四月 2023IT Education&Training2023/

46、4/146.3.1 Qt4与数据库的连接Qt SQL模块中连接并处理数据库被分成三个层次。第一层是数据库的驱动程序。第二层是数据库的连接层。实现对数据库的连接,对数据库操作结果、错误信息的进行处理。第三层是用户接口层。提供了一套模型视图体系来完成对数据库的可视化操作。Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14驱动程序Qt4中为多种数据库提供了本地驱动程序,见下表:DriverDatabaseQDB2IBM DB2 version7.1 and laterQIBASEBorland InterB

47、aseQMYSQLMySQLQOCIOracle(Oracle Call Interface)QODBCODBC(includes Microsoft SQL server)QPSQLPostgreSQL version 6.x and 7.xQSQLITESQLite version 3 and laterQSQLITE2SQLite version 2QTDSSybase Adaptive ServerNeusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.3.1 Qt4与数据库的连接Qt4与与My

48、SQL数据库的连接数据库的连接#include 用QSqlDatabase类通过驱动程序建立起和数据库的连接设置hostName,databaseName,username,password等属性打开数据库操作数据库关闭数据库Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14QSqlDatabase db=QSqlDatabase:addDatabase(“QMYSQL”);db.setHostName(“localhsot”);db.setDatabaseName(“testmysql.db”);d

49、b.setUserName(“user”);db.setPassword(“password”);if(!db.open())qDebug()db.lastError();qFatal(“Failed to connect.”);6.3.1 Qt4与数据库的连接Qt4与与MySQL数据库的连接数据库的连接Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/146.3.1 Qt4与数据库的连接Qt4与与SQLite数据库的连接数据库的连接SQLite的驱动程序是QSQLITE。SQLITE数据库不是基于服务器

50、的,不需要设置username,password等属性,只要制定databaseName就可以了。QSqlDatabase db=QSqlDatabase:addDatabase(“QSQLITE”);db.setDatabaseName(“testsqlite.db”);if(!db.open())qDebug()db.lastError();qFatal(“Failed to connect.”);Neusoft Institute of Information14 四月 2023IT Education&Training2023/4/14SQLite数据库的一个优良特性是它可以在内存中建

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁