




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大连东软信息学院 嵌入式系统导论课程组嵌入式系统2022/7/181第6章 Qt图形界面应用程序开发6.1 Qt简介6.2 Qt4 Designer的应用6.3 Qt4与数据库6.4 Qt/Embedded2022/7/1826.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程序结构及示例2022/7/1836.1.1 Qt的简介Qt是挪威Trolltech公司出品的一个跨平台的C+图形用户界面库。Trolltech公司目前开发两种产品:一种是跨平台的图形界
2、面设计平台,即Qt。一种是提供给嵌入式系统的应用程序开发平台,可以应用到PDA,手机等手持设备上,即Qtopia,是基于FrameBuffer的Qt/Embedded。2022/7/184Trolltech的双重授权模式Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权2022/7/1856.1.1 Qt的简介Qt 同 X Window 上的Motif,Openwin,GTK 等图形界面库,和Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有很多优点。(1)Qt有优良的跨平台性,可支持的操作系统有。(2)Unix、Li
3、nux、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的嵌入式处理器上。 2022/7/186Qt特征(一)面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号(signal)和插槽(slot)概念,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得
4、Qt非常适合于真正的构件编程友好的联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程2022/7/187Qt特征(二)便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准 2022/7/188Qt特征(三)丰富的API函数Qt为专业应用提供了大量的函数,在Qt的AP
5、I中含有大约250个C+类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件2022/7/1896.1.2 Qt中主要的类QObjectQObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下:QObject:QObject ( QObject*parent =0,constchar*name = 0 ) 在上面的函数中如果parent为0则构造一
6、个无父的对象,如果对象是一个组件,则它就会成为顶层的窗口。2022/7/1810QObject类(一)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;;2022/7/1811QObject类(二)/构造初始化一个Mandelbrot
7、对象Mandelbrot:Mandelbrot(QObject *parent=0, const char *name):QObject(parent, name)connect(&timer,SIGNAL(timeout(),SLOT(calculate();2022/7/18126.1.2 Qt中主要的类2. QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始、结束以及会话管理。对于一个应用程序来说,建立此类的对象是必不可少的QApplication是QObject类
8、的子类2022/7/1813函数分组 系统设置 desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。 事件处理 exec()、processEvents()、enter_loop()、exit
9、_loop()、exit()、quit()。 sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。 图形用户界面风格 style()、setStyle()、polish()。 颜色使用 colorSpec()、setColorSpec()、qwsSetCustomColors()。 文本处理 s
10、etDefaultCodec()、installTranslator()、removeTranslator()、translate()。 窗口部件 mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。 高级光标处理 hasGlobalMouseTracking()、setGlobalMouseTracki
11、ng()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。 X窗口系统同步 flushX()、syncX()。 对话管理 isSessionRestored()、sessionId()、commitData()、saveState()。 线程 lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。 杂项 closeAllWindows()、startingUp()、closingDown()、type()。 2022/7/18146.1.2 Qt中主要的类3. QWid
12、getQWidget类是所有用户接口对象(组建)的基类,它继承了QObject类的属性组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类QWidget是QObject类的子类2022/7/1815上下文 函数 窗口函数 show()、hide()、raise()、lower()、close()。 顶级窗口 caption()、setCaption()、icon()、setIcon()、iconText()、se
13、tIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。 窗口内容 update()、repaint()、erase()、scroll()、updateMask()。 几何形状 pos()、size()、rect()、x()、y()、width()、height()、sizePolicy()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、set
14、Geometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、setFixedSize()。 模式 isVisible()、isVisibleTo()、visibleRect()、isMi
15、nimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。 观感 style()、setStyle()、cursor()、setCursor()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGro
16、up()、fontMetrics()、fontInfo()。 键盘焦点函数 isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。 鼠标和键盘捕获 grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、keyboardGrabber()。 事件处理器 event()、mousePressEvent()、mouseReleaseEv
17、ent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent(
18、)、customEvent()。 变化处理器 enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。 系统函数 parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。 这是什么的帮助 customWhatsThis()。 内部核心函数 focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFl
19、ags()。 2022/7/18166.1.3 信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其他工具包最不相同的部分。 在图形用户界面编程中,经常会出现窗口中的一个部件发生的变化会被通知给另一个部件,在Qt中采用信号和槽来实现对象部件之间的通信。 2022/7/1817Signal和Slot的声明(一)在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:class Student : public QObject Q_OBJECTpublic: Student() myMark = 0; int
20、mark() const return myMark; public slots: void setMark(int newMark);signals: void markChanged(int newMark);private: int myMark;2022/7/1818Signal和Slot的声明(二)signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在事件处理结束后发出signalvoid Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markCha
21、nged(myMark); 2022/7/1819Signal和Slot的连接(一)在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal函数原形如下:bool connect ( constQObject*sender, constchar*signal, const QObject * receiver, const char * slot) 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件2022/7/1820S
22、ignal和Slot的连接(二)在使用connect()函数进行连接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar;QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) ); 2022/7/1821Signal和Slot的连接方式(一)2022/7/1822Signal和Slot的连接方式(二)同一个信号连接多个插槽connect(slider, SI
23、GNAL(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();2022/7/1823Signal和Slot的连
24、接方式(三)一个信号连接到另一个信号connect(lineEdit, SIGNAL(textChanged(const QString &), this, SIGNAL(updateRecord(const QString &);取消一个连接disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接2022/7/18246.1.4 Qt的帮助文档2022/7/18256.1.5 Qt4的特点和优势Qt4较以前的版本,有了较大的改进,具体特点及优
25、势如下: Qt4中,所有的头文件(.h)存放位置更规范,按照分类形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夹下,而不像之前的版本,所有的头文件都放在一起。Qt4增加了很多新的控件,但是对之前版本中的控件也有保留,只不过在命名上在类名前面加上Qt3。Qt4中界面的设计与逻辑功能分开,界面设计的头文件中不再包含任何用户自己写的代码,逻辑功能的实现在用户自己重新定义的类中实现,而这个重新定义的类是完成界面设计类的继承类。当用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面头文件覆盖原来的文件即可。 2022/7/18
26、266.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.2rootlocalhost qt-x11-opensource-src-4.3.2#./configure -no-opensslrootlocalhost qt-x11-opensource-src-4.3.2#gmake2022/7/18276.1.6 Qt4的安装与配置3安装库文件rootlocalh
27、ost qt-x11-opensource-src-4.3.2#surootlocalhost qt-x11-opensource-src-4.3.2#gmake installQt默认被安装的路径为:/usr/local/Trolltech/Qt-4.3.2。如果安装的时候需要更改安装的路径,可以加上-prefix 参数来指定安装路径。4设置环境变量 如果需要直接用Qt命令,那么需要设置环境变量PATH。具体操作为,如果你的shell是bash,ksh,zsh或sh,那么在.profile或.bash_profile文件中加上下面的信息。 PATH=/usr/local/Trolltech/
28、Qt-4.3.2/bin:$PATHexport PATH 2022/7/18286.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(); 2022/7/1829编译及运行建立一个文件夹helloworld,把helloworld.cpp放到文件夹下qmake p
29、rojectqmakemake./helloworld2022/7/18306.2 Qt4 Designer的应用6.2.1 Qt Designer的应用6.2.2 Qt中的控件及对话框类6.2.3 基于Qt Designer程序设计流程6.2.4 Qt应用程序实例2022/7/18316.2.1 Qt Designer的应用Qt提供了非常强大的GUI编辑工具Qt Designer,它的操作界面类似于Windows下的Visual Studio,而且它还提供了相当多的部件资源。在编译Qt源码的时候,也同时生成了可执行程序designer。rootlocalhost sunjm#designer
30、2022/7/18322022/7/18336.2.2 Qt中的控件及对话框类Qt提供了很多控件和常用的对话框,可以用在很多地方。主窗口控件:QMenuBar,QToolBar,QStatusBar布局相关的控件:QSplitter,QScrollArea四种方式按钮: QPushButton, QToolButton, QCheckBox,和 QRadioButton容器类控件:QFrame,QToolBox,QLabel。滚动条:QAbstractScrollArea,是视图类和其他滚动控件的基类。显示信息的控件:QLabel,QTextBrowser。数据输入的控件:QLineEdit,
31、QTextEdit。QLineEdit只可输入许可器允许的字符。QTextEdit是QAbstractScrollArea的子类,可以输入多行文本。程序的进行状态控件:QProgressDialog,QProgressBar。QInputDialog可以方便的让用户输入一行文本或者数字。Qt中还可以自定义控件,并集成到Qt Designer中。 2022/7/18346.2.3 基于Qt Designer程序设计流程1.创建和初始化子部件2.设置子部件布局3.设置Tab键次序(不是必须)4.建立信号与插槽的连接2022/7/18356.2.3 基于Qt Designer程序设计流程1.创建并布
32、置部件2.对部件使用布局管理4.建立信号与插槽的连接3.设置Tab键次序2022/7/18366.2.3 基于Qt Designer程序设计流程 编辑两个部件之间信号与插槽之间的连接方式2022/7/18376.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文件qm
33、ake6.编译make2022/7/1838Qt Designer 功能框图2022/7/18396.2.4 Qt应用程序实例QT应用程序实例计算器 保存为test.ui文件,放到test文件夹下2022/7/1840生成ui_test.h头文件uic o ui_test.h test.ui具体代码参见ui_test.h代码2022/7/1841编写test.h文件#include #include ui_test.hclass Dialog : public QDialog,public Ui:DialogQ_OBJECTpublic:Dialog(QDialog *parent=0);pr
34、ivate slots:void val1();void val2();void val3();void add();void ok();private:double num1;double num2;bool flag;2022/7/1842编写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, SIGN
35、AL(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();2022/7/1843编写main.cpp#include#include#includetest.hint main(int argc, char *argv)QApplication app(argc,argv
36、);Dialog *dialog = new Dialog;dialog-show();return app.exec();2022/7/1844编译及执行cd testqmake projectqmakemake./test2022/7/18456.3 Qt4与数据库6.3.1 Qt4与数据库的连接6.3.2 执行SQL命令6.3.3 SQL模型2022/7/1846Qt4连接数据库的原理#includeQt4中提供了QtSql模块。为访问数据库提供了平台和相应的接口提供模型视图体系,来完成可视化的信息输入2022/7/18476.3.1 Qt4与数据库的连接Qt SQL模块中连接并处理数据
37、库被分成三个层次。第一层是数据库的驱动程序。第二层是数据库的连接层。实现对数据库的连接,对数据库操作结果、错误信息的进行处理。第三层是用户接口层。提供了一套模型视图体系来完成对数据库的可视化操作。2022/7/1848驱动程序Qt4中为多种数据库提供了本地驱动程序,见下表:DriverDatabaseQDB2IBM DB2 version7.1 and laterQIBASEBorland InterBaseQMYSQLMySQLQOCIOracle(Oracle Call Interface)QODBCODBC(includes Microsoft SQL server)QPSQLPostg
38、reSQL version 6.x and 7.xQSQLITESQLite version 3 and laterQSQLITE2SQLite version 2QTDSSybase Adaptive Server2022/7/18496.3.1 Qt4与数据库的连接Qt4与MySQL数据库的连接#include 用QSqlDatabase类通过驱动程序建立起和数据库的连接设置hostName,databaseName,username,password等属性打开数据库操作数据库关闭数据库2022/7/1850QSqlDatabase db = QSqlDatabase:addDatabas
39、e(“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数据库的连接2022/7/18516.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.”);2022/7/1852SQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脑内脓肿护理
- 结石快速康复护理
- 2025年八年级班主任工作计划示例
- 2025年非营利组织财务战略计划
- 部编版小学一年级英语上册期末复习计划
- 改良冰袋护理应用与优化方案
- 监理资料管理培训
- 小学语文期末复习计划优化方案
- 煤矿安全生产标准化培训
- 园林绿化工程施工现场环境保护措施
- 公共场所卫生许可证申请表
- 信息安全风险清单之2:信息安全典型脆弱性清单-脆弱性示例、涵义、事件类别、后果和安全控制措施(雷泽佳编制2024A0)
- 亲子教育健康养生知识讲座
- GB/T 2881-2023工业硅
- 氧化铝厂溶出车间水洗方案
- 【多旋翼无人机的组装与调试分析6000字(论文)】
- 城中村改造的法律问题探讨
- 商标分割申请书
- 上海租赁合同
- (2012)149号文造价咨询费计算表
- EndNote使用教程介绍课件
评论
0/150
提交评论