[信息与通信]实5手机QT界面编程初步.ppt

上传人:音乐台 文档编号:2000815 上传时间:2019-01-30 格式:PPT 页数:49 大小:581KB
返回 下载 相关 举报
[信息与通信]实5手机QT界面编程初步.ppt_第1页
第1页 / 共49页
[信息与通信]实5手机QT界面编程初步.ppt_第2页
第2页 / 共49页
[信息与通信]实5手机QT界面编程初步.ppt_第3页
第3页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[信息与通信]实5手机QT界面编程初步.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]实5手机QT界面编程初步.ppt(49页珍藏版)》请在三一文库上搜索。

1、北京博创兴业科技有限公司,Qt编程,Qt简介,Linux GUI,GTK+(C),Qt(C+),GNOME,GPE,KDE,OPIE/Qtopia,主流的Linux窗口系统,PC,嵌入式,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, A

2、IX等) Qt/Embeded (嵌入式平台) Qt对不同平台的专门API进行了专门的封装(文件处理,网络等) Qt免费版本基于GPL协议,意味着我们可以用Qt库编写程序,并且免费发布自己的GPL软件。,Qt/Embedded及Qtopia介绍,Qt/Embedded(Qt/E)是Qt面向嵌入式应用的简化版本,大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/E。 Qtopia是基于Qt/E库开发的一个嵌入式窗口系统和应用程序集,广泛用于PDA等掌上设备。 整个GUI系统的构建需要对Qt/E、Qtopia依次分别编译,然后有机地整合在一起。Qt/E为Qtopia提供了底层支持,G

3、UI系统的图形库窗口组建都由Qt/E实现。 我们可以在Trolltech公司的ftp站点下载到这些工具包的源代码。,Qt特征,引入一种用于无缝对象通讯的被称为信号和槽的非常强大的机制 可查询和可设计的属性, 强大的事件和事件过滤器, 根据上下文进行国际化的字符串翻译, 完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。 以一种自然的方式组织对象所有权的分层次和可查询的对象树。 被守护的指针,QGuardedPtr,当参考对象被破坏时,可以自动地设置为无效,不像正常的C+指针在它们的对象被破坏的时候变成了“摇摆指针”。,Qt编程核心技术,Qt编程核心技术,Q

4、t对象模型 元对象系统 信号和槽 属性 QObject类 对象树 事件处理,元对象系统,是一个C+扩展,使得Qt更适合真正的组件GUI编程 使用元编译器moc产生能被标准C+编译器访问的附加C+代码 带有moc预编译器的C+基本上提供了面向对象的C的灵活性或类似于Java的运行环境,并保持了C+的执行效率和扩展性 实现功能 对象间通信的信号/槽机制 运行时的类型信息 动态属性系统,信号和槽(1/2),所有的GUI程序必须有某种机制响应用户动作并执行处理代码。 命令行程序的做法:暂停执行,等待用户输入,然后采用switch语句等机制使程序根据输入不同而分支执行。 但GUI程序必须不断地响应用户输

5、入,因为它还需要不断地更新窗口区域。 现代窗口系统由事件和事件监听器系统来解决这个问题。其思想是: 用户的每次动作都触发一个事件,程序员只需要编写监听事件及事件触发时应该执行的代码。 在GTK+中,使用信号和回调函数的机制。,信号和槽(2/2),在Qt程序中,利用信号(signal)和槽(slot)机制进行对象间的通信 当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且

6、signal和slot之间也不是一一对应的。,事件驱动原理,一个GUI可以由菜单、工具栏、按钮、输入框和其它许多统称为窗口组件的GUI元素组成。 当用户与窗口组件交互时,例如点击一个菜单项或者在输入框中输入文字,窗口部件将发出一个命名信号,例如clicked、text_changed。 然后程序会对用户的动作做出响应,例如保存文档或退出应用程序。Qt通过把信号连接到称为槽的函数来实现这个机制。,事件驱动的实现,事件循环,Signal和Slot的声明(1/2),Qt定义了两个伪关键字signals和slots来标识代码中类的信号和槽。 下面是一个声明了信号和槽的类的例子。 class Stude

7、nt : public QObject Q_OBJECT public: Student() myMark = 0; int mark() const return myMark; private slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ;,Signal和Slot的声明(2/2),常见的窗口组件通常已经在Qt库中实现了对用户的动作作出相应信号的发出的过程。如用户按下一个按钮后,命名为clicked的信号就会发出。 当然我们也可以自定义信号,并在适

8、当的时候发出这个信号。要发出一个信号,只需在代码的某处调用emit。如: void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); ,Signal和Slot的连接(1/2),在signal和slot声明以后,需要使用connect()函数将它们连接起来。 connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal,函数原形如下: bool QObject:connect ( const

9、 QObject * sender, const char * signal, const QObject * receiver, const char * member ) static 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件。,Signal和Slot的连接(2/2),在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIG

10、NAL(valueChanged(int), label, SLOT(setNum(int) );,Signal和Slot的连接方式,取消Signal和Slot连接,取消Signal和Slot连接 disconnect(lcd,SIGNAL(overflow(),this, SLOT(handleMathError(); 取消连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接,属性,属性也是一个类的成员 在类声明中用宏Q_PROPERTY来声明 只能在继承于QObject的子类中声明 设置和得到属性的成员函数如下: QObject:setProperty() QMe

11、taObject:propertyNames() QMetaObject:property (),QObject类,QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的TObject connect():提供信号槽机制 对象树:QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children() 列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。 事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或

12、鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。,QApplication,QApplication和QWidget都是QObject类的子类 QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的,QWidget,QWidget类是所有用户接口对象的

13、基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上 QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类,一个完整的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

14、app.setMainWidget(hello); 8 hello-show(); 9 return app.exec(); 10 ,Qt 开发环境的建立,建立X86平台PC机的Qt开发环境(一),我们在这里移植了qt-embedded-2.3.10和免费PDA版本的qtopia-free-2.1.1图形界面。Qtopia的版本要和Qt/embedded的版本兼容,否则在编译链接的时候会出现错误。 为了调试方便,在PC机上编译x86版本的Qt/E及Qtopia ,在PC机的linux操作系统模拟目标板进行应用程序的开发。因为Qt-x11提供了一个虚拟帧缓冲qvfb (qt virtual fr

15、ame buffer),可以用来模拟一个嵌入式目标板,开发的GUI应用程序就可以在qvfb上运行从而进行测试。在PC机上通过测试后,最后再把应用程序交叉编译,下载、运行在真正的目标设备上。,建立X86平台PC机的Qt开发环境(二),解压缩并设置环境变量 安装tmake cd /pxa270Qt tar xzf tmake-1.13.tar.gz export TMAKEDIR=$PWD/tmake-1.13 安装Qt 2.3.2 tar xzf qt-x11-2.3.2.tar.gz export QT2DIR=$PWD/qt-2.3.2 安装Qt/E 2.3.10 tar xzf qt-em

16、bedded-2.3.10-free.tar.gz export QTEDIR=$PWD/qt-2.3.10,建立X86平台PC机的Qt开发环境(三),编译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 echo yes|./configure -no-xft make mkdir $QTEDIR/bin cp bin/ui

17、c $QTEDIR/bin/,建立X86平台PC机的Qt开发环境(四),编译qvfb export TMAKEPATH=$TMAKEDIR/lib/linux-g+ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$TMAKEDIR/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/,建立X86平台PC机的Qt开发环境(五),编译Qt/E

18、 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 cp $QPEDIR/qconfig-qpe.h src/tools/ ./configure -no-xft -qvfb -depths 4,8,16,32 make,建立X86平台PC机的Qt开发环境(六),在qvfb上显示Qt程序 cd $QTEDIR/ex

19、amples/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,建立X86平台PC机的Qt开发环境(七),编译Qtopia2.1.1 cd $QPEDIR export QTDIR=$QTEDIR export LD_LIBRARY_PATH=$QPEDIR/lib:$QTEDIR/lib:

20、$LD_LIBRARY_PATH export PATH=$QPEDIR/bin:$PATH ./configure -edition pda -no-qtopiadesktop -displaysize 640x480 make make install,建立X86平台PC机的Qt开发环境(八),在qvfb上显示Qtopia桌面 编辑qtopia.sh并保存在$QPEDIR/img/opt/Qtopia目录下,运行即可 #!/bin/sh export QTDIR=$PWD export QPEDIR=$QTDIR export KDEDIR=$QTDIR export TSLIB_TSDE

21、VICE=/dev/input/event1 export LD_LIBRARY_PATH=$QPEDIR/lib export QWS_SIZE=640x480 export QWS_MOUSE_PROTO= “TPanel:/dev/input/event2 USB“ export PATH=$PATH:$QPEDIR/bin qvfb -width 640 -height 480 -depth 16 -nocursor& sleep 5 qpe,为ARM平台建立Qt开发环境(一),上次实验我们在PC机上建立了Qt/E+Qtopia的模拟环境,而我们的Qtopia桌面和应用程序最终还是要在

22、ARM开发板上运行的,所以这次我们要先建立Qt的交叉开发环境,再交叉编译和运行Qt/Qtopia应用程序,为ARM平台建立Qt开发环境(二),在Trolltech公司的网站上可以下载Qt/Embedded、Qtopia的免费版本, 所需源码包如下: e2fsprogs-libs-1.37.tar.gz ext2文件系统工具包 libjpeg-iwmmxt.tar.bz2 jpeg解码库jpeg-6b tslib.tar.gz 触摸屏工具包 tmake-1.13.tar.gz tmake工具,编译Qtopia需要使用 qt-2.3.2. tar.gz Qt/X11-2.3.2, 需要使用其中的工

23、具 qt-x11-free-3.3.4. tar.bz2 Qt/X11-3.3.4,需要使用其中的工具 qt-2.3.10. tar.gz Qt/Embedded 2.3.10 qtopia-free-2.1.1. tar.bz2 Qtopia 2.1.1,为ARM平台建立Qt开发环境(三),与PC机的X86平台安装Qt/E+Qtopia开发环境类似, 不同的地方是这里还使用了几个另外的库,按照下面的顺序编译注意:可参考qtopia-free-2.1.1自带的文档中的Building Qtopia from Source 一章。 (1)解压缩源码包 (2)设置环境变量 (3)编译 jpeg-6

24、b库 (4)编译e2fsprogs-libs库 (5)编译 tslib库 (6)编译Qt 2.3.2 (7)编译Qt/Embedded (8)编译 Qtopia,为ARM平台建立Qt开发环境(四),在本次实验中,脚本文件buildqtopia.sh已为大家做好了以上几步,我们可以将它复制到源代码目录,直接运行该文件进行编译。大家可以分析buildqtopia.sh内容,掌握编译的步骤。 执行完buildqtopia.sh后,编译好的Qtopia位于qtopia-free-2.1.1/img/opt/Qtopia目录下 根据开发板的配置建立Qtopia启动脚本 下面可以通过NFS或TFTP下载等

25、方式在开发板上运行了。,Qt Designer,Qt Designer,Qt应用程序除了使用手工编写代码的方式外,图形界面的设计一般可以用Qt Desinger来完成 Qt Designer的功能十分强大,界面类似于VB、Delphi等可视化编程工具,提供了大量可供编程使用的组件,基于Qt Designer程序设计(1/4),在Qt Designer中开发时,一般要涉及到下面几个步骤: 1.创建和初始化子部件 2.设置子部件布局 3.设置Tab键次序(不是必须) 4.建立信号与插槽的连接 5.编写事件处理函数,基于Qt Designer程序设计(2/4),1.创建并布置部件,2.对部件使用布局

26、管理,3.建立信号与插槽的连接,基于Qt Designer程序设计(3/4),编辑两个部件之间信号与插槽之间的连接方式,基于Qt Designer程序设计(4/4),Qt窗体的不同风格预览,Qt 程序开发流程,Qt Designer设计流程图,Qt程序开发过程,使用designer设计 设计界面,添加窗口组件 建立信号槽连接 编写事件处理函数 保存工程为.ui文件,得到一个主窗口类 2. 编写main.cpp文件进行主窗口类的实例化及显示 3. 使用progen生成.pro工程文件 progen t app.t o application.pro,Qt程序开发过程,4. 设置编译所需的环境变量,包括指定tmake路径 PC本机编译 TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g+ ARM交叉编译 TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g+ 5.通过tmake自动生成Makefile文件 tmake o Makefile application.pro 6. make生成可执行文件,谢谢各位,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1