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

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

《诺基亚公司Qt嵌入式开发.ppt》由会员分享,可在线阅读,更多相关《诺基亚公司Qt嵌入式开发.ppt(59页珍藏版)》请在三一办公上搜索。

1、2023/10/30,大连东软信息学院 嵌入式系统导论课程组,嵌入式系统,2023/10/30,第6章 Qt图形界面应用程序开发,6.1 Qt简介6.2 Qt4 Designer的应用6.3 Qt4与数据库6.4 Qt/Embedded,2023/10/30,6.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程序结构及示例,2023/10/30,6.1.1 Qt的简介,Qt是挪威Trolltech公司出品的一个跨平台的C+图形用户界面库。Trolltech

2、公司目前开发两种产品:一种是跨平台的图形界面设计平台,即Qt。一种是提供给嵌入式系统的应用程序开发平台,可以应用到PDA,手机等手持设备上,即Qtopia,是基于FrameBuffer的Qt/Embedded。,2023/10/30,Trolltech的双重授权模式,Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权,2023/10/30,6.1.1 Qt的简介,Qt 同 X Window 上的Motif,Openwin,GTK 等图形界面库,和Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有很多优点。(1)Qt有优

3、良的跨平台性,可支持的操作系统有。(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的嵌入式处理器上。,2023/10/30,Qt特征(一),面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号(signal)和插槽(slot)概念,并

4、支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程友好的联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程,2023/10/30,Qt特征(二),便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准,2023/10/30,Qt特征(

5、三),丰富的API函数Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件,2023/10/30,6.1.2 Qt中主要的类,QObjectQObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下:QObject:QObject(QObject*parent=0,constchar

6、*name=0)在上面的函数中如果parent为0则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的窗口。,2023/10/30,QObject类(一),class Mandelbrot:public QObjectQ_OBJECT/需要使用signal和slotpublic:Mandelbrot(QObect*parent=0,const char*name);public slots:void start();signals:void done();private slots:void calculate();private:QTimer timer;;,2023/10/30,Q

7、Object类(二),/构造初始化一个Mandelbrot对象Mandelbrot:Mandelbrot(QObject*parent=0,const char*name):QObject(parent,name)connect(,2023/10/30,6.1.2 Qt中主要的类,2.QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始、结束以及会话管理。对于一个应用程序来说,建立此类的对象是必不可少的QApplication是QObject类的子类,2023/10/30,

8、2023/10/30,6.1.2 Qt中主要的类,3.QWidgetQWidget类是所有用户接口对象(组建)的基类,它继承了QObject类的属性组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类QWidget是QObject类的子类,2023/10/30,2023/10/30,6.1.3 信号和槽,信号和槽机制是Qt的一个主要特征,是Qt与其他工具包最不相同的部分。在图形用户界面编程中,经常会出现窗口中的一

9、个部件发生的变化会被通知给另一个部件,在Qt中采用信号和槽来实现对象部件之间的通信。,2023/10/30,Signal和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(int newMark);signals:void markChanged(

10、int newMark);private:int myMark;,2023/10/30,Signal和Slot的声明(二),signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在事件处理结束后发出signalvoid Student:setMark(int newMark)if(newMark!=myMark)myMark=newMark;emit markChanged(myMark);,2023/10/30,Signal和Slot的连接(一),在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObj

11、ect类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal函数原形如下:bool connect(constQObject*sender,constchar*signal,const QObject*receiver,const char*slot)其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件,2023/10/30,Signal和Slot的连接(二),在使用connect()函数进行连接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:QLabel*label=new QLabel;QScrollBar*sc

12、roll=new QScrollBar;QObject:connect(scroll,SIGNAL(valueChanged(int),label,SLOT(setNum(int);,2023/10/30,Signal和Slot的连接方式(一),2023/10/30,Signal和Slot的连接方式(二),同一个信号连接多个插槽connect(slider,SIGNAL(valueChanged(int),spinBox,SLOT(setValue(int);connect(slider,SIGNAL(valueChanged(int),this,SLOT(updateStatusBarInd

13、icator(int);多个信号连接到同一个插槽connect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError();,2023/10/30,Signal和Slot的连接方式(三),一个信号连接到另一个信号connect(lineEdit,SIGNAL(textChanged(const QString 取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接,2023/10/3

14、0,6.1.4 Qt的帮助文档,2023/10/30,6.1.5 Qt4的特点和优势,Qt4较以前的版本,有了较大的改进,具体特点及优势如下:Qt4中,所有的头文件(.h)存放位置更规范,按照分类形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夹下,而不像之前的版本,所有的头文件都放在一起。Qt4增加了很多新的控件,但是对之前版本中的控件也有保留,只不过在命名上在类名前面加上Qt3。Qt4中界面的设计与逻辑功能分开,界面设计的头文件中不再包含任何用户自己写的代码,逻辑功能的实现在用户自己重新定义的类中实现,而这个重新定义的类是完成界面设

15、计类的继承类。当用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面头文件覆盖原来的文件即可。,2023/10/30,6.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#gmake,2023/10/30,6.1.6 Qt4的安装与配置

16、,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,那么在.profile或.bash_profile文件中加上下面的信息。PATH=/usr/local/Trolltech/Qt-4.3.2/bin:

17、$PATHexport PATH,2023/10/30,6.1.7 Qt4程序结构及示例,【程序6.5】helloworld.cpp文件内容。#include#include int main(int argc,char*argv)QApplication app(argc,argv);QLabel*label=new QLabel(Hello World!);label-show();return app.exec();,2023/10/30,编译及运行,建立一个文件夹helloworld,把helloworld.cpp放到文件夹下qmake projectqmakemake./hellow

18、orld,2023/10/30,6.2 Qt4 Designer的应用,6.2.1 Qt Designer的应用6.2.2 Qt中的控件及对话框类6.2.3 基于Qt Designer程序设计流程6.2.4 Qt应用程序实例,2023/10/30,6.2.1 Qt Designer的应用,Qt提供了非常强大的GUI编辑工具Qt Designer,它的操作界面类似于Windows下的Visual Studio,而且它还提供了相当多的部件资源。在编译Qt源码的时候,也同时生成了可执行程序designer。rootlocalhost sunjm#designer,2023/10/30,2023/10

19、/30,6.2.2 Qt中的控件及对话框类,Qt提供了很多控件和常用的对话框,可以用在很多地方。主窗口控件:QMenuBar,QToolBar,QStatusBar布局相关的控件:QSplitter,QScrollArea四种方式按钮:QPushButton,QToolButton,QCheckBox,和 QRadioButton容器类控件:QFrame,QToolBox,QLabel。滚动条:QAbstractScrollArea,是视图类和其他滚动控件的基类。显示信息的控件:QLabel,QTextBrowser。数据输入的控件:QLineEdit,QTextEdit。QLineEdit只

20、可输入许可器允许的字符。QTextEdit是QAbstractScrollArea的子类,可以输入多行文本。程序的进行状态控件:QProgressDialog,QProgressBar。QInputDialog可以方便的让用户输入一行文本或者数字。Qt中还可以自定义控件,并集成到Qt Designer中。,2023/10/30,6.2.3 基于Qt Designer程序设计流程,1.创建和初始化子部件2.设置子部件布局3.设置Tab键次序(不是必须)4.建立信号与插槽的连接,2023/10/30,6.2.3 基于Qt Designer程序设计流程,1.创建并布置部件,2.对部件使用布局管理,4

21、.建立信号与插槽的连接,3.设置Tab键次序,2023/10/30,6.2.3 基于Qt Designer程序设计流程,编辑两个部件之间信号与插槽之间的连接方式,2023/10/30,6.2.3 基于Qt Designer程序设计流程,Qt4 Designer将工程文件组织成.ui的文件以使用Qt Designer为例通过designer设计并保存工程为*.ui文件由.ui文件生成ui_*.h文件2.手工编写一个main.cpp文件3.手工编写*.cpp和*.h文件。4.使用qmake工具生成.pro工程文件qmake-project 5.生成makefile文件qmake6.编译make,2

22、023/10/30,Qt Designer 功能框图,2023/10/30,6.2.4 Qt应用程序实例,QT应用程序实例计算器 保存为test.ui文件,放到test文件夹下,2023/10/30,生成ui_test.h头文件,uic o ui_test.h test.ui具体代码参见ui_test.h代码,2023/10/30,编写test.h文件,#include#include ui_test.hclass Dialog:public QDialog,public Ui:DialogQ_OBJECTpublic:Dialog(QDialog*parent=0);private slot

23、s:void val1();void val2();void val3();void add();void ok();private:double num1;double num2;bool flag;,2023/10/30,编写test.cpp文件,#include#include test.hDialog:Dialog(QDialog*parent)setupUi(this);num1=0;num2=0;flag=0;connect(Button1,SIGNAL(clicked(),this,SLOT(val1();connect(Button2,SIGNAL(clicked(),this

24、,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();,2023/10/30,编写main.cpp,#include#include#includetest.hint main(int argc,char*argv)QApplication app(argc,argv);Dialog*dialog=new Dialog;d

25、ialog-show();return app.exec();,2023/10/30,编译及执行,cd testqmake projectqmakemake./test,2023/10/30,6.3 Qt4与数据库,6.3.1 Qt4与数据库的连接6.3.2 执行SQL命令6.3.3 SQL模型,2023/10/30,Qt4连接数据库的原理,#includeQt4中提供了QtSql模块。为访问数据库提供了平台和相应的接口提供模型视图体系,来完成可视化的信息输入,2023/10/30,6.3.1 Qt4与数据库的连接,Qt SQL模块中连接并处理数据库被分成三个层次。第一层是数据库的驱动程序。第

26、二层是数据库的连接层。实现对数据库的连接,对数据库操作结果、错误信息的进行处理。第三层是用户接口层。提供了一套模型视图体系来完成对数据库的可视化操作。,2023/10/30,驱动程序,Qt4中为多种数据库提供了本地驱动程序,见下表:,2023/10/30,6.3.1 Qt4与数据库的连接Qt4与MySQL数据库的连接,#include 用QSqlDatabase类通过驱动程序建立起和数据库的连接设置hostName,databaseName,username,password等属性打开数据库操作数据库关闭数据库,2023/10/30,QSqlDatabase db=QSqlDatabase:a

27、ddDatabase(“QMYSQL”);db.setHostName(“localhsot”);db.setDatabaseName(“testmysql.db”);db.setUserName(“user”);db.setPassword(“password”);if(!db.open())qDebug()db.lastError();qFatal(“Failed to connect.”);,6.3.1 Qt4与数据库的连接Qt4与MySQL数据库的连接,2023/10/30,6.3.1 Qt4与数据库的连接Qt4与SQLite数据库的连接,SQLite的驱动程序是QSQLITE。SQL

28、ITE数据库不是基于服务器的,不需要设置username,password等属性,只要制定databaseName就可以了。QSqlDatabase db=QSqlDatabase:addDatabase(“QSQLITE”);db.setDatabaseName(“testsqlite.db”);if(!db.open())qDebug()db.lastError();qFatal(“Failed to connect.”);,2023/10/30,SQLite数据库的一个优良特性是它可以在内存中建立,操作快,省去了对磁盘的读写。把数据库保留在内存中,可以通过这样的代码来实现:db.setD

29、atabaseName(“:memory:”);结束对数据库的操作,用close方法来实现关闭数据库。,6.3.1 Qt4与数据库的连接,2023/10/30,6.3.2 执行SQL命令,用QSqlQuery对象来执行SQL命令来对数据库操作。QSqlQuery query;query.exec(“SELECT*FROM teacher”);exec()方法执行之后,通过next()方法来指定结果集的第一条记录,依次访问后续的记录,直到最后一条记录,next()方法返回false。如果查询失败或者查询的结果集为空,那么next()返回值也为false。while(query.next()cou

30、tquery.value(0)endl;coutquery.value(1);,2023/10/30,6.3.3 SQL模型,Qt中提供了模型类和模型/视图框架,使用这些模型,用户设置完成对数据库的SQL语句,自动的向视图表中添加数据,可视化的操作数据库。Qt提供了三种SQL模型。(1)QSqlQueryModel:为SELECT SQL语句结果集提供只读数据模型(2)QSqlTabelModel:为单个数据库表提供可编辑的数据模型。(3)QSqlRelationModel:为单个数据库表提供可编辑的数据模型,同时可以和其他数据库表产生关联。,2023/10/30,6.4 Qt/Embedde

31、介绍,Qt/Embedded是TrollTech公司在Qt的基础上开发的为嵌入式GUI和应用程序的开发而设计的C+工具包。Qt4之后,QT/Embedded改称为Qtopia-core,2023/10/30,2023/10/30,的编译及安装,解压rootlocalhost#./configure xplatform qws/linux-arm-g+/-qvfb qconfig full depths 4,8,16,24,32 no-qt3support-vrootlocalhost#./configure xplatform qws/linux-arm-g+/-qvfb depths 4,8,16,24,32 no-qt3support rootlocalhost#gmakerootlocalhost#su c“gmake install”,2023/10/30,Qt/Embedded程序运行,在XWindow上进行模拟rootlocalhost#qvfb width 320 height 680&rootlocalhost#./test-qws,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号