《Qt程序设计基础》PPT课件.ppt

上传人:za****8 文档编号:14489514 上传时间:2020-07-21 格式:PPT 页数:54 大小:704.01KB
返回 下载 相关 举报
《Qt程序设计基础》PPT课件.ppt_第1页
第1页 / 共54页
《Qt程序设计基础》PPT课件.ppt_第2页
第2页 / 共54页
《Qt程序设计基础》PPT课件.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
Qt程序开发入门,北京博创兴业科技有限公司,2,第一部分:,Qt基础程序设计基础,博创科技 张笑天 zhangxt_,3,Qt简介,Qt是Trolltech公司的标志性产品,是一个跨平台的C+图形用户界面(GUI)工具包 Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置 Qt/Windows(Windows XP, 2000, NT 4, Me/98) Qt/Mac(Mac OS X) Qt/X11(Linux, Solaris, HP-UX, IRIX, AIX等) Qt对不同平台的专门API进行了 专门的封装(文件处理,网络等),4,Trolltech的双重授权模式,Trolltech公司提供两种授权模式,一种用于商业性质的授权,一种用于免费的开源授权,5,Qt特征(一),面向对象 Qt具有模块设计和注重软件构件或元素的可重用行的特点 构件支持 Qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程 友好的联机帮助 Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。并且对于初学者,其中的指南将一步步介绍如何进行Qt编程,6,Qt特征(二),便利性 由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题 用户自定义 使用其他的一些工具包经常会遇到这样一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的行为 国际化 Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准,7,Qt特征(三),丰富的API函数 Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数的类都是GUI专有的 可用户化外观 Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换 完整的一套组件工具 Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件,8,Qt编程特点,初始化 在Qt应用程序中,首先要创建一个QApplication对象,QApplication类负责图形用户界面应用程序的控制流和主设置,在main.cpp中定义如下: int main(int argc, char *argv) QApplication a(argc, argv); ,9,1.初始化,QApplication包含在main()函数的事件循环体中,对所有来自Window系统和其它源文件的事件进行处理和调度,还包括处理应用程序的初始化和结束,并且提供会话管理。 在Qt应用程序中,不管有多少个窗口,QApplication对象只能有一个,而且必须在其他对象之前创建。 QApplication类中封装了很多函数,其中包括: 系统设置:setFont() 用来设置字体 事件处理:sendEvent() 用来发送事件 GUI风格:setStyles() 设置图形用户界面的风格 颜色使用:colorSpec() 用来返回颜色文件 文本处理:translate() 用来处理文本信息 创建组件:setmainWidget() 用来设置窗口的主组件 ,10,2.窗口的创建,在Qt程序中,创建窗口比较简单,只要在main.cpp文件中为ApplicationWindow建立一个指针: ApplicationWindow *mw = new ApplicatonWindow(); ApplicationWindow是在Application.h中定义的类,它是一个QmainWindow的继承类 组件的创建需要调用相应组件的类,并在头文件中包含此类的头文件或者创建自定义类,继承以后组件类的功能 #include “qpushbutton.h”,3.组件的创建,11,3.组件的创建,class hello:public Qwidget hello类继承了Qwidget类的特征,并加入了自定义的特征功能,同样需要在头文件中包含此类的头文件 在main.cpp的函数中需要创建hello类的实例,或创建QPushButton类的实例,才可以使用 hello h(string); QPushButton hello(“Hello,world!”,0); 如果组件本身可以作为主窗口,则无需设置主窗口。在上例中,下压按钮创建时其构造函数中的第二个参数为0,表示按钮所在窗口为主窗口,不需要设置主窗口。否则需要调用QWidget成员函数setMainWidget()来进行设置,12,3.组件的创建,h.setMainWidget( 在X程序中,敲击键盘,鼠标指针在窗口中的移动或鼠标按键动作等,都是事件 在Xt中提供了提供了一种叫做回调的事件处理方式。它通过翻译表,将事件映射为相应的动作,当组件得到事件通知,就去表中找出相应的动作例程进行处理。这种机制需要应用程序注册有关组件的回调函数或普通的事件处理函数,以分发循环Xt的事件,4.事件,13,Qt事件的处理过程:QApplication的事件循环体从事件队列中拾取本地窗口系统事件或其他事件,译成QEvent(),并送给QObject:event(),最后送给QWidget:event()本别对事件处理,4.事件,14,4.事件,其实在Qt程序中,事件处理的方式也是回调,但与以往所不同的是,事件的发出和接收采用了信号(signal)和插槽(slot)机制,无须调用翻译表。利用信号和插槽进行对象间的通信是Qt的最主要特征之一 当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。,15,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; ;,16,Signal和Slot的声明(二),signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signal void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); ,17,Signal和Slot的连接(一),在signal和slot声明以后,需要使用connect()函数将它们连接起来。connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal 函数原形如下: bool connect ( constQObject*sender, constchar*signal, constchar*member ) const 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件,18,Signal和Slot的连接(二),在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) );,19,Signal和Slot的连接方式(一),20,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();,21,Signal和Slot的连接方式(三),一个信号连接到另一个信号 connect(lineEdit, SIGNAL(textChanged(const QString 取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接,22,退出事件程序,退出事件程序,只需要在程序结束时返回一个exec(),例如: return a.exec(); 其中a为QApplication的实例,当调用exec()将进入主事件的循环中,直到exit()被调用或主窗口部件被销毁,23,整个Qt应用程序的执行过程,24,3个主要的基类,QObject QObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下: QObject:QObject ( QObject*parent =0,constchar*name = 0 ) 创建带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。比如,对话框是其中的ok和cancel按钮的父对象。 在上面的函数中如果parent为0则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的敞口。,25,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; ;,26,QObject类(二),/构造初始化一个Mandelbrot对象 Mandelbrot:Mandelbrot(QObject *parent=0, const char *name) :QObject(parent, name) connect( ,27,3个主要的基类,2. QApplication QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的 QApplication和QWidget都是QObject类的子类,28,29,3个主要的基类,3. QWidget QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上 QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类,30,31,一个完整的Qt程序,1 #include 2 #include 3 int main(int argc, char *argv) 4 5 QApplication app (argc, argv); 6 QLabel *hello = new QLabel(Hello Qt/Embedded!, 0); 7 app.setMainWidget(hello); 8 hello-show(); 9 return app.exec(); 10 ,32,第二部分:,Qt Designer,33,Qt Designer,Qt应用程序除了使用手工编写代码的方式外,还可以用过Qt Desinger来完成,Qt Designer的功能十分强大,界面类似于我们常用的VB,而且还提供了大量可供编程使用的组件,34,35,基于Qt Designer程序设计(一),在使用Qt Designer程序开发时,一般要涉及到下面几个步骤: 1.创建和初始化子部件 2.设置子部件布局 3.设置Tab键次序(不是必须) 4.建立信号与插槽的连接,36,基于Qt Designer程序设计(二),1.创建并布置部件,2.对部件使用布局管理,3.建立信号与插槽的连接,37,基于Qt Designer程序设计(三),编辑两个部件之间信号与插槽之间的连接方式,38,基于Qt Designer程序设计(四),Qt Designer下不同风格的预览,39,Qt Designer的工作过程,Qt Designer将工程文件组织成.ui的文件 由.ui文件生成.cpp 和 .h文件 .ui -xml uic 生成moc_filenaem.cpp moc,40,Qt Designer 功能框图,41,子类继承方式(Qt 2.X),42,第三部分:,Qt 开发环境的建立,43,建立Qt/Embedded开发环境(一),在我们嵌入式开发中Qt提供了使用在小型嵌入式设备上的轻量级的工具包Qt/Embedded(Qt/E),要使用Qt/E需要和Qt/X11以及tmake工具进行配合,我们可以在Trolltech公司的ftp站点下载到这些工具包的源代码ftp:/ 这里列出这些工具包的一个可用的组合 Qt/Embedded 2.3.10 Qt 2.3.2 for X11 tmake 1.13,44,建立Qt/Embedded开发环境(二),解压缩并设置环境变量 安装tmake cd /pxa270Qt tar xzf tmake-1.13.tar.gz export TMAKEDIR=$PWD/tmake-1.13 安装Qt 2.3.2 cd /pxa270Qt tar xzf qt-x11-2.3.2.tar.gz export QT2DIR=$PWD/qt-2.3.2 安装Qt/E 2.3.10 cd /pxa270Qt tar xzf qt-embedded-2.3.10-free.tar.gz export QTEDIR=$PWD/qt-2.3.10,45,建立Qt/Embedded开发环境(三),编译Qt/Embedded库的时候需要注意,我们通常是要将库源码编译两次。一次是为了使我们的程序能够在pc机上显示出来而编译的为pc机上的程序使用的Qt/E库;另一次是编译在开发板上使用的库,是为开发板上的应用程序准备的库文件 以编译pc机上的Qt/E库为例,编译Qt/E的过程主要分为三步,分别是编译Qt 2.3.2 ,编译qvfb,编译Qt/Embedded 2.3.10,46,建立Qt/Embedded开发环境(四),编译Qt 2.3.2 cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g+ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft make mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/,47,建立Qt/Embedded开发环境(五),编译qvfb export TMAKEPATH=$TMAKEDIR/lib/linux-g+ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/tools/qvfb tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/,48,建立Qt/Embedded开发环境(六),编译Qt/E 2.3.10 cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g+ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft -qvfb -depths 4,8,16,32 make,49,建立Qt/Embedded开发环境(六),在qvfb上显示Qt程序 cd $QTEDIR/examples/launcher export QTDIR=$QTEDIR export PATH=$QTEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH qvfb -width 640 -height 480 & sleep 10 ./launcher -qws,50,建立Qt/Embedded开发环境(六),编译在开发板上运行的Qt/E库 cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g+ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -xplatform linux-arm-g+ -no-xft -no-qvfb -depths 4,8,16,32 make,51,第四部分:,Qt 程序开发流程,52,一个完整的Qt程序开发过程(一),以使用Qt Designer为例 1. 通过designer设计并保存工程为.ui文件 2.手工编写一个main.cpp文件 3.使用progen工具生成.pro工程文件 progen t app.t o filename.pro,53,一个完整的Qt程序开发过程(二),4. 指定tmake路径 本机编译 TMAKEPATH=/tmake的安装路径(如$TMAKEDIR)/lib/qws/linux-x86-g+ 交叉编译 TMAKEPATH=/tmake的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g+ 5.通过tmake自动生成Makefile文件 tmake o Makefile filename.pro 6. make生成可执行文件,54,感谢您参加博创嵌入式教学培训!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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