




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/8/9,大连东软信息学院 嵌入式系统导论课程组,嵌入式系统,2019/8/9,第6章 Qt图形界面应用程序开发,6.1 Qt简介 6.2 Qt4 Designer的应用 6.3 Qt4与数据库 6.4 Qt/Embedded,2019/8/9,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程序结构及示例,2019/8/9,6.1.1 Qt的简介,Qt是挪威Trolltech公司出品的一个跨平台的C+图形用户界面库。 Trolltech公司目前开发两种产品: 一种是跨平台的图形界面设计平台,即Qt。 一种是提供给嵌入式系统的应用程序开发平台,可以应用到PDA,手机等手持设备上,即Qtopia,是基于FrameBuffer的Qt/Embedded。,2019/8/9,Trolltech的双重授权模式,Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权,2019/8/9,6.1.1 Qt的简介,Qt 同 X Window 上的Motif,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的嵌入式处理器上。,2019/8/9,Qt特征(一),面向对象 Qt具有模块设计和注重软件构件或元素的可重用性的特点 构件支持 Qt提供信号(signal)和插槽(slot)概念,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程 友好的联机帮助 Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程,2019/8/9,Qt特征(二),便利性 由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题 国际化 Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准,2019/8/9,Qt特征(三),丰富的API函数 Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的 可用户化外观 Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换 完整的一套组件工具 Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件,2019/8/9,6.1.2 Qt中主要的类,QObject QObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下: QObject:QObject ( QObject * parent =0,const char * name = 0 ) 在上面的函数中如果parent为0则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的窗口。,2019/8/9,QObject类(一),class Mandelbrot:public QObject Q_OBJECT /需要使用signal和slot public : Mandelbrot(QObect *parent=0, const char *name); public slots: void start(); signals: void done(); private slots: void calculate(); private: QTimer timer; ;,2019/8/9,QObject类(二),/构造初始化一个Mandelbrot对象 Mandelbrot:Mandelbrot(QObject *parent=0, const char *name) :QObject(parent, name) connect( ,2019/8/9,6.1.2 Qt中主要的类,2. QApplication QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件 处理应用程序的开始、结束以及会话管理。 对于一个应用程序来说,建立此类的对象是必不可少的 QApplication是QObject类的子类,2019/8/9,2019/8/9,6.1.2 Qt中主要的类,3. QWidget QWidget类是所有用户接口对象(组建)的基类,它继承了QObject类的属性 组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在屏幕上 QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类 QWidget是QObject类的子类,2019/8/9,2019/8/9,6.1.3 信号和槽,信号和槽机制是Qt的一个主要特征,是Qt与其他工具包最不相同的部分。 在图形用户界面编程中,经常会出现窗口中的一个部件发生的变化会被通知给另一个部件,在Qt中采用信号和槽来实现对象部件之间的通信。,2019/8/9,Signal和Slot的声明(一),在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot: class Student : public QObject Q_OBJECT public: Student() myMark = 0; int mark() const return myMark; public slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ;,2019/8/9,Signal和Slot的声明(二),signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在事件处理结束后发出signal void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); ,2019/8/9,Signal和Slot的连接(一),在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal 函数原形如下: bool connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * slot) 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件,2019/8/9,Signal和Slot的连接(二),在使用connect()函数进行连接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) );,2019/8/9,Signal和Slot的连接方式(一),2019/8/9,Signal和Slot的连接方式(二),同一个信号连接多个插槽 connect(slider, SIGNAL(valueChanged(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();,2019/8/9,Signal和Slot的连接方式(三),一个信号连接到另一个信号 connect(lineEdit, SIGNAL(textChanged(const QString 取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接,2019/8/9,6.1.4 Qt的帮助文档,2019/8/9,6.1.5 Qt4的特点和优势,Qt4较以前的版本,有了较大的改进,具体特点及优势如下: Qt4中,所有的头文件(.h)存放位置更规范,按照分类形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夹下,而不像之前的版本,所有的头文件都放在一起。 Qt4增加了很多新的控件,但是对之前版本中的控件也有保留,只不过在命名上在类名前面加上Qt3。 Qt4中界面的设计与逻辑功能分开,界面设计的头文件中不再包含任何用户自己写的代码,逻辑功能的实现在用户自己重新定义的类中实现,而这个重新定义的类是完成界面设计类的继承类。当用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面头文件覆盖原来的文件即可。,2019/8/9,6.1.6 Qt4的安装与配置,1 解压压缩包 rootlocalhost home# tar zxvf qt-x11-opensource-src-4.3.2.tar.gz 2 配置并编译 rootlocalhost home# cd qt-x11-opensource-src-4.3.2 rootlocalhost qt-x11-opensource-src-4.3.2#./configure -no-openssl rootlocalhost qt-x11-opensource-src-4.3.2#gmake,2019/8/9,6.1.6 Qt4的安装与配置,3安装库文件 rootlocalhost qt-x11-opensource-src-4.3.2#su rootlocalhost qt-x11-opensource-src-4.3.2#gmake install Qt默认被安装的路径为:/usr/local/Trolltech/Qt-4.3.2。如果安装的时候需要更改安装的路径,可以加上-prefix 参数来指定安装路径。 4设置环境变量 如果需要直接用Qt命令,那么需要设置环境变量PATH。具体操作为,如果你的shell是bash,ksh,zsh或sh,那么在.profile或.bash_profile文件中加上下面的信息。 PATH=/usr/local/Trolltech/Qt-4.3.2/bin:$PATH export PATH,2019/8/9,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(); ,2019/8/9,编译及运行,建立一个文件夹helloworld,把helloworld.cpp放到文件夹下 qmake project qmake make ./helloworld,2019/8/9,6.2 Qt4 Designer的应用,6.2.1 Qt Designer的应用 6.2.2 Qt中的控件及对话框类 6.2.3 基于Qt Designer程序设计流程 6.2.4 Qt应用程序实例,2019/8/9,6.2.1 Qt Designer的应用,Qt提供了非常强大的GUI编辑工具Qt Designer,它的操作界面类似于Windows下的Visual Studio,而且它还提供了相当多的部件资源。在编译Qt源码的时候,也同时生成了可执行程序designer。 rootlocalhost sunjm#designer,2019/8/9,2019/8/9,6.2.2 Qt中的控件及对话框类,Qt提供了很多控件和常用的对话框,可以用在很多地方。 主窗口控件:QMenuBar,QToolBar,QStatusBar 布局相关的控件:QSplitter,QScrollArea 四种方式按钮: QPushButton, QToolButton, QCheckBox,和 QRadioButton 容器类控件:QFrame,QToolBox,QLabel。 滚动条:QAbstractScrollArea,是视图类和其他滚动控件的基类。 显示信息的控件:QLabel,QTextBrowser。 数据输入的控件:QLineEdit,QTextEdit。 QLineEdit只可输入许可器允许的字符。 QTextEdit是QAbstractScrollArea的子类,可以输入多行文本。 程序的进行状态控件:QProgressDialog,QProgressBar。 QInputDialog可以方便的让用户输入一行文本或者数字。 Qt中还可以自定义控件,并集成到Qt Designer中。,2019/8/9,6.2.3 基于Qt Designer程序设计流程,1.创建和初始化子部件 2.设置子部件布局 3.设置Tab键次序(不是必须) 4.建立信号与插槽的连接,2019/8/9,6.2.3 基于Qt Designer程序设计流程,1.创建并布置部件,2.对部件使用布局管理,4.建立信号与插槽的连接,3.设置Tab键次序,2019/8/9,6.2.3 基于Qt Designer程序设计流程,编辑两个部件之间信号与插槽之间的连接方式,2019/8/9,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文件 qmake 6.编译 make,2019/8/9,Qt Designer 功能框图,2019/8/9,6.2.4 Qt应用程序实例,QT应用程序实例计算器 保存为test.ui文件,放到test文件夹下,2019/8/9,生成ui_test.h头文件,uic o ui_test.h test.ui 具体代码参见ui_test.h代码,2019/8/9,编写test.h文件,#include #include “ui_test.h“ class Dialog : public QDialog,public Ui:Dialog Q_OBJECT public: Dialog(QDialog *parent=0); private slots: void val1(); void val2(); void val3(); void add(); void ok(); private: double num1; double num2; bool flag; ;,2019/8/9,编写test.cpp文件,#include #include “test.h“ Dialog:Dialog(QDialog *parent) setupUi(this); num1=0; num2=0; flag=0; connect(Button1, SIGNAL(clicked(), 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(); ,2019/8/9,编写main.cpp,#include #include #include“test.h“ int main(int argc, char *argv) QApplication app(argc,argv); Dialog *dialog = new Dialog; dialog-show(); return app.exec(); ,2019/8/9,编译及执行,cd test qmake project qmake make ./test,2019/8/9,6.3 Qt4与数据库,6.3.1 Qt4与数据库的连接 6.3.2 执行SQL命令 6.3.3 SQL模型,2019/8/9,Qt4连接数据库的原理,#include Qt4中提供了QtSql模块。 为访问数据库提供了平台和相应的接口 提供模型视图体系,来完成可视化的信息输入,2019/8/9,6.3.1 Qt4与数据库的连接,Qt SQL模块中连接并处理数据库被分成三个层次。 第一层是数据库的驱动程序。 第二层是数据库的连接层。实现对数据库的连接,对数据库操作结果、错误信息的进行处理。 第三层是用户接口层。提供了一套模型视图体系来完成对数据库的可视化操作。,2019/8/9,驱动程序,Qt4中为多种数据库提供了本地驱动程序,见下表:,2019/8/9,6.3.1 Qt4与数据库的连接 Qt4与MySQL数据库的连接,#include 用QSqlDatabase类通过驱动程序建立起和数据库的连接 设置hostName,databaseName,username,password等属性 打开数据库 操作数据库 关闭数据库,2019/8/9,QSqlDatabase db = QSqlDatabase:addDatabase(“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数据库的连接,2019/8/9,6.3.1 Qt4与数据库的连接 Qt4与SQLite数据库的连接,SQLite的驱动程序是QSQLITE。 SQLITE数据库不是基于服务器的,不需要设置username,password等属性,只要制定databaseName就可以了。 QSqlDatabase db = QSqlDatabase:addDatabase(“QSQLITE”); db.setDatabaseName(“testsqlite.db”); if(!db.open()) qDebug() db.lastError(); qFatal(“Failed to connect.”); ,2019/8/9,SQLite数据库的一个优良特性是它可以在内存中建立,操作快,省去了对磁盘的读写。把数据库保留在内存中,可以通过这样的代码来实现: db.setDatabaseName(“:memory:”); 结束对数据库的操作,用close方法来实现关闭数据库。,6.3.1 Qt4与数据库的连接,2019/8/9,6.3.2 执行SQL命令,用QSqlQuery对象来执行SQL命令来对数据库操作。 QSqlQuery query; query.exec(“SELECT * FROM teacher”); exec()方法执行之后,通过next()方法来指定结果集的第一条记录,依次访问后续的记录,直到最后一条记录,next()方法返回false。如果查询失败或者查询的结果集为空
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 责任和经济协议书
- 物业居间费协议书
- 西城区城市供暖协议书
- 购买荒山坟墓地协议书
- 旧房屋确权协议书
- 少先队活动协议书
- 聘请医生做法人协议书
- 楼盘区购房协议书
- 无理由退货协议书
- 版终止租房协议书
- 2023-2024学年上海市宝山区八年级(下)期末数学试卷 (含答案)
- GB/T 2346-2003流体传动系统及元件公称压力系列
- GB 5009.74-2014食品安全国家标准食品添加剂中重金属限量试验
- FZ/T 10007-2018棉及化纤纯纺、混纺本色纱线检验规则
- 《薪酬管理的国内外文献综述》1100字
- 设备调拨单表格
- 工厂电气安全培训课件
- DB63T1743-2019青海省建筑工程资料管理规程
- 文稿成果pcb承认书
- (精华完整版)国家开放大学电大本科《农业生态学》网络课形考网考作业及答案
- 运动控制系统思考题参考答案阮毅
评论
0/150
提交评论