版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2024/3/16大连东软信息学院嵌入式系统导论课程组嵌入式系统2024/3/16第6章Qt图形界面应用程序开发6.1Qt简介6.2Qt4Designer的应用6.3Qt4与数据库6.4Qt/Embedded2024/3/166.1Qt简介6.1.1Qt的介绍6.1.2Qt中主要的类6.1.3信号和槽6.1.4Qt的帮助文档6.1.5Qt4的特点和优势6.1.6Qt4的安装与配置6.1.7Qt4程序结构及例如2024/3/166.1.1Qt的简介Qt是挪威Trolltech公司出品的一个跨平台的C++图形用户界面库。Trolltech公司目前开发两种产品:一种是跨平台的图形界面设计平台,即Qt。一种是提供给嵌入式系统的应用程序开发平台,可以应用到PDA,等手持设备上,即Qtopia,是基于FrameBuffer的Qt/Embedded。2024/3/16Trolltech的双重授权模式Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权2024/3/166.1.1Qt的简介Qt同XWindow上的Motif,Openwin,GTK等图形界面库,和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西,但是Qt具有很多优点。〔1〕Qt有优良的跨平台性,可支持的操作系统有。〔2〕Unix、Linux、Solaris、SunOS等X11平台;〔3〕Windows95、Windows98、WindowsNT4.0、Windows2000、WindowsXP;〔4〕MacOSX、HP-UX、QNX、FressBSD等;〔5〕MIPS、ARM、StrongARM、Motorola68000、PowerPC和XScale等支持FrameBuffer的嵌入式处理器上。2024/3/16Qt特征〔一〕面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号〔signal〕和插槽〔slot〕概念,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程友好的联机帮助Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程2024/3/16Qt特征〔二〕便利性由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准2024/3/16Qt特征〔三〕丰富的API函数Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C++类,大多数的类都是GUI专有的可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的根本模块称之为组件,组件是用户界面的组成局部,Qt含有用来创立专业外观的用户界面所需要的所有组件2024/3/166.1.2Qt中主要的类QObject QObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下: QObject::QObject(QObject
*
parent=0,const
char
*
name=0)
在上面的函数中如果parent为0那么构造一个无父的对象,如果对象是一个组件,那么它就会成为顶层的窗口。2024/3/16QObject类〔一〕
classMandelbrot:publicQObject { Q_OBJECT//需要使用signal和slot
public :
Mandelbrot(QObect*parent=0,constchar*name); …… publicslots: voidstart(); signals: voiddone(); privateslots: voidcalculate(); private: QTimertimer; …… };2024/3/16QObject类〔二〕
//构造初始化一个Mandelbrot对象
Mandelbrot::Mandelbrot(QObject*parent=0,constchar*name) :QObject(parent,name) { connect(&timer,SIGNAL(timeout()),SLOT(calculate())); …… {2024/3/166.1.2Qt中主要的类2.QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始、结束以及会话管理。对于一个应用程序来说,建立此类的对象是必不可少的QApplication是QObject类的子类2024/3/16函数分组系统设置desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。事件处理exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。图形用户界面风格
style()、setStyle()、polish()。颜色使用colorSpec()、setColorSpec()、qwsSetCustomColors()。文本处理setDefaultCodec()、installTranslator()、removeTranslator()、translate()。窗口部件mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。高级光标处理hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。X窗口系统同步flushX()、syncX()。对话管理isSessionRestored()、sessionId()、commitData()、saveState()。线程lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。杂项closeAllWindows()、startingUp()、closingDown()、type()。2024/3/166.1.2Qt中主要的类3.QWidgetQWidget类是所有用户接口对象(组建)的基类,它继承了QObject类的属性组件是用户界面的单元组成局部,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类QWidget是QObject类的子类2024/3/16上下文函数窗口函数show()、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()、height()、sizePolicy()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、setFixedSize()。模式isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。观感style()、setStyle()、cursor()、setCursor()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。键盘焦点函数isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。鼠标和键盘捕获grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、keyboardGrabber()。事件处理器event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。变化处理器enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。系统函数parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。这是什么的帮助customWhatsThis()。内部核心函数focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。2024/3/166.1.3信号和槽信号和槽机制是Qt的一个主要特征,是Qt与其他工具包最不相同的局部。在图形用户界面编程中,经常会出现窗口中的一个部件发生的变化会被通知给另一个部件,在Qt中采用信号和槽来实现对象部件之间的通信。2024/3/16Signal和Slot的声明〔一〕 在Qt程序设计中,但凡包含signal和slot的类中都要加上Q_OBJECT的定义,下面的例子给出了如何在一个类中定义signal和slot:classStudent:publicQObject{Q_OBJECTpublic:Student(){myMark=0;}intmark()const{returnmyMark;}publicslots:voidsetMark(intnewMark);signals:voidmarkChanged(intnewMark);private:intmyMark;};2024/3/16Signal和Slot的声明〔二〕
signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在事件处理结束后发出signalvoidStudent::setMark(intnewMark){if(newMark!=myMark){myMark=newMark;
emitmarkChanged(myMark);}}2024/3/16Signal和Slot的连接〔一〕 在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal
函数原形如下:boolconnect(const
QObject
*
sender,const
char
*
signal,constQObject*receiver,constchar*slot)
其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件
2024/3/16Signal和Slot的连接〔二〕 在使用connect()函数进行连接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下:
QLabel*label=newQLabel;
QScrollBar*scroll=newQScrollBar; QObject::connect(scroll,SIGNAL(valueChanged(int)), label,SLOT(setNum(int)));
2024/3/16Signal和Slot的连接方式〔一〕2024/3/16Signal和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()));2024/3/16Signal和Slot的连接方式〔三〕一个信号连接到另一个信号connect(lineEdit,SIGNAL(textChanged(constQString&)), this,SIGNAL(updateRecord(constQString&)));取消一个连接disconnect(lcd,SIGNAL(overflow()),this, SLOT(handleMathError()));取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接2024/3/166.1.4Qt的帮助文档2024/3/166.1.5Qt4的特点和优势Qt4较以前的版本,有了较大的改进,具体特点及优势如下:Qt4中,所有的头文件〔.h〕存放位置更标准,按照分类形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夹下,而不像之前的版本,所有的头文件都放在一起。Qt4增加了很多新的控件,但是对之前版本中的控件也有保存,只不过在命名上在类名前面加上Qt3。Qt4中界面的设计与逻辑功能分开,界面设计的头文件中不再包含任何用户自己写的代码,逻辑功能的实现在用户自己重新定义的类中实现,而这个重新定义的类是完成界面设计类的继承类。当用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面头文件覆盖原来的文件即可。2024/3/166.1.6Qt4的安装与配置1.解压压缩包
[root@localhosthome]#tarzxvfqt-x11-opensource-src-4.3.2.tar.gz2.配置并编译[root@localhostqt-x11-opensource-src-4.3.2]#./configure-no-openssl[root@localhostqt-x11-opensource-src-4.3.2]#gmake2024/3/166.1.6Qt4的安装与配置3.安装库文件[root@localhostqt-x11-opensource-src-4.3.2]#su[root@localhostqt-x11-opensource-src-4.3.2]#gmakeinstallQt默认被安装的路径为:。如果安装的时候需要更改安装的路径,可以加上-prefix参数来指定安装路径。4.设置环境变量如果需要直接用Qt命令,那么需要设置环境变量PATH。具体操作为,如果你的shell是bash,ksh,zsh或sh,那么在.profile或.bash_profile文件中加上下面的信息。PATH=/usr/local/Trolltech/Qt-4.3.2/bin:$PATHexportPATH2024/3/166.1.7Qt4程序结构及例如【程序6.5】helloworld.cpp文件内容。
#include<QApplication>#include<QLabel>intmain(intargc,char*argv[]){QApplicationapp(argc,argv);QLabel*label=newQLabel("<h2><fontcolor=red>Hello</font><i>World!</i></h2>");label->show();returnapp.exec();}2024/3/16编译及运行建立一个文件夹helloworld,把helloworld.cpp放到文件夹下qmake–projectqmakemake./helloworld2024/3/166.2Qt4Designer的应用6.2.1QtDesigner的应用6.2.2Qt中的控件及对话框类6.2.3基于QtDesigner程序设计流程6.2.4Qt应用程序实例2024/3/166.2.1QtDesigner的应用Qt提供了非常强大的GUI编辑工具QtDesigner,它的操作界面类似于Windows下的VisualStudio,而且它还提供了相当多的部件资源。在编译Qt源码的时候,也同时生成了可执行程序designer。[root@localhostsunjm]#designer2024/3/162024/3/166.2.2Qt中的控件及对话框类
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中还可以自定义控件,并集成到QtDesigner中。2024/3/166.2.3基于QtDesigner程序设计流程1.创立和初始化子部件2.设置子部件布局3.设置Tab键次序〔不是必须〕4.建立信号与插槽的连接2024/3/166.2.3基于QtDesigner程序设计流程1.创立并布置部件2.对部件使用布局管理4.建立信号与插槽的连接3.设置Tab键次序2024/3/166.2.3基于QtDesigner程序设计流程编辑两个部件之间信号与插槽之间的连接方式2024/3/166.2.3基于QtDesigner程序设计流程Qt4Designer将工程文件组织成.ui的文件以使用QtDesigner为例通过designer设计并保存工程为**.ui文件由.ui文件生成ui_**.h文件2.手工编写一个main.cpp文件3.手工编写**.cpp和**.h文件。4.使用qmake工具生成.pro工程文件
qmake-project
5.生成makefile文件
qmake6.编译
make2024/3/16QtDesigner功能框图2024/3/166.2.4Qt应用程序实例QT应用程序实例—计算器
保存为test.ui文件,放到test文件夹下2024/3/16生成ui_test.h头文件uic–oui_test.htest.ui具体代码参见ui_test.h代码2024/3/16编写test.h文件#include<QtGui/QWidget>#include"ui_test.h"classDialog:publicQDialog,publicUi::Dialog{ Q_OBJECTpublic: Dialog(QDialog*parent=0);privateslots: voidval1(); voidval2(); voidval3(); voidadd(); voidok();private: doublenum1; doublenum2; boolflag;};2024/3/16编写test.cpp文件
#include<QtGui>#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()));}2024/3/16编写main.cpp#include<QApplication>#include<QtGui/QDialog>#include"test.h"intmain(intargc,char*argv[]){ QApplicationapp(argc,argv);
Dialog*dialog=newDialog; dialog->show(); returnapp.exec();}2024/3/16编译及执行cdtestqmake–projectqmakemake./test2024/3/166.3Qt4与数据库6.3.1Qt4与数据库的连接6.3.2执行SQL命令6.3.3SQL模型2024/3/16Qt4连接数据库的原理#include<QtSql>Qt4中提供了QtSql模块。为访问数据库提供了平台和相应的接口提供模型视图体系,来完成可视化的信息输入2024/3/166.3.1Qt4与数据库的连接QtSQL模块中连接并处理数据库被分成三个层次。第一层是数据库的驱动程序。第二层是数据库的连接层。实现对数据库的连接,对数据库操作结果、错误信息的进行处理。第三层是用户接口层。提供了一套模型视图体系来完成对数据库的可视化操作。2024/3/16驱动程序Qt4中为多种数据库提供了本地驱动程序,见下表:DriverDatabaseQDB2IBMDB2version7.1andlaterQIBASEBorlandInterBaseQMYSQLMySQLQOCIOracle(OracleCallInterface)QODBCODBC(includesMicrosoftSQLserver)QPSQLPostgreSQLversion6.xand7.xQSQLITESQLiteversion3andlaterQSQLITE2SQLiteversion2QTDSSybaseAdaptiveServer2024/3/166.3.1Qt4与数据库的连接
Qt4与MySQL数据库的连接#include<QSqlDatabase>用QSqlDatabase类通过驱动程序建立起和数据库的连接设置hostName,databaseName,username,password等属性翻开数据库操作数据库关闭数据库2024/3/16QSqlDatabasedb=QSqlDatabase::addDatabase〔“QMYSQL”〕;db.setHostName〔“localhsot”〕;db.setDatabaseName〔“testmysql.db”〕;db.setUserName〔“user”〕;db.setPassword〔“password”〕;if〔!db.open()〕{ qDebug()<<db.lastError(); qFatal(“Failedtoconnect.”);}6.3.1Qt4与数据库的连接
Qt4与MySQL数据库的连接2024/3/166.3.1Qt4与数据库的连接
Qt4与SQLite数据库的连接SQLite的驱动程序是QSQLITE。S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年就餐实施方案
- 美甲店临时涨价方案
- 期中测试提升卷-2024-2025学年人教PEP版英语六年级上册(含答案含听力原文无音频)
- 山西公务员面试模拟46
- 小学语文学习任务单的设计与实施
- 江苏行政职业能力C类模拟12
- 浙江公务员面试模拟78
- 2015年6月28日上午陕西公务员面试真题
- 地方公务员广东申论40
- 河北省公务员面试模拟202
- PPT模板:严谨实用国奖答辩国家奖学金申请课件
- 小学五年级下册科学课件-4.3《火山》1人教版(28张)ppt课件
- 中小学生心理健康量表(共9页)
- 预制盖板工程施工组织设计方案
- 变形美术字设计
- 汽车灯光系统--ppt课件
- 配合比调整权限
- 小学语言文字工作计划例文
- 标准气体的配制课件
- 外伤性颅底脑脊液漏的处理策略
- 平菇栽培技术ppt
评论
0/150
提交评论