《Qt图形编程》PPT课件.ppt

上传人:za****8 文档编号:6719652 上传时间:2020-03-02 格式:PPT 页数:59 大小:1.75MB
返回 下载 相关 举报
《Qt图形编程》PPT课件.ppt_第1页
第1页 / 共59页
《Qt图形编程》PPT课件.ppt_第2页
第2页 / 共59页
《Qt图形编程》PPT课件.ppt_第3页
第3页 / 共59页
点击查看更多>>
资源描述
嵌入式应用程序设计第7章Qt图形编程 2 第1章搭建嵌入式Linux开发环境第2章嵌入式文件I O编程第3章嵌入式Linux多任务编程第4章嵌入式Linux进程间通行第5章嵌入式Linux多线程编程第6章嵌入式Linux网络编程第7章Qt图形编程第8章嵌入式Linux设备驱动编程第9章Qt聊天项目设计 课程安排 3 7 1嵌入式GUI简介7 2Qt Embedded开发入门7 3实验内容7 4小结7 5思考与练习 本章课程 4 目前的桌面机操作系统大多有着美观 操作方便 功能齐全的GUI 图形用户界面 例如KDE或者GNOME GUI 图形用户界面 是指计算机与其使用者之间的对话接口 可以说 GUI是当今计算机技术的重大成就 它的存在为使用者提供了友好便利的界面 并大大地方便了非专业用户的使用 使得人们从繁琐的命令中解脱出来 可以通过窗口 菜单方便地进行操作 在嵌入式系统中 GUI的地位也越来越重要 但是不同于桌面机系统 嵌入式GUI要求简单 直观 可靠 占用资源小且反应快速 以适应系统硬件资源有限的条件 另外 由于嵌入式系统硬件本身的特殊性 嵌入式GUI应具备高度可移植性与可裁减性 以适应不同的硬件条件和使用需求 7 1嵌入式GUI简介 5 嵌入式GUI特点体积小 运行时耗用系统资源小 上层接口与硬件无关 高度可移植 高可靠性 在某些应用场合应具备实时性 7 1嵌入式GUI简介 6 7 1 1Qt EmbeddedQt Embedded是Trolltech公司 目前已被Nokia收购 为嵌入式系统开发的Qt版本 从Qt4 1版本开始 Qt Embedded改名为QtopiaCore 又从Qt4 4 1版本开始 QtopiaCore又改名为QtforEmbeddedLinux 7 1嵌入式GUI简介 7 7 1 1Qt EmbeddedQt Embedded的优缺点 7 1嵌入式GUI简介 8 7 1 2MiniGUIMniGUI由魏永明先生和众多志愿者开发 是面向实时嵌入式系统的轻量级图形用户界面支持系统 自1999年初遵循GPL条款发布第一个版本以来 MiniGUI已广泛应用于手持信息终端 机顶盒 工业控制系统及工业仪表 便携式多媒体播放器 查询终端等产品和领域 目前 MiniGUI已成为跨操作系统 跨硬件平台的图形用户界面支持系统 可在Linux uClinux VxWorks eCos uC OS II pSOS ThreadX Nucleus OSE等操作系统以及Win32平台上运行 已验证的硬件平台包括ix86 ARM PowerPC MIPS DragonBall ColdFire等等 MiniGUIV2 0为基于嵌入式Linux的高端嵌入式设备提供了完整的多进程支持 从而将MiniGUI从中端市场带到了高端市场 最新的MiniGUIV3 0则是继2 0之后的一个重要增强 增加了如外观渲染器技术 双向文本支持 透明控件 独立滚动条控件 UPF字体和位图字体等新的特性 7 1嵌入式GUI简介 9 7 1 2Microwindow TinyX等它由魏永明先生和众多志愿者开发 是面向实时嵌入式系统的轻量级图形用户界面支持系统 自1999年初遵循GPL条款发布第一个版本以来 MiniGUI已广泛应用于手持信息终端 机顶盒 工业控制系统及工业仪表 便携式多媒体播放器 查询终端等产品和领域 目前 MiniGUI已成为跨操作系统 跨硬件平台的图形用户界面支持系统 可在Linux uClinux VxWorks eCos uC OS II pSOS ThreadX Nucleus OSE等操作系统以及Win32平台上运行 已验证的硬件平台包括ix86 ARM PowerPC MIPS DragonBall ColdFire等等 MiniGUIV2 0为基于嵌入式Linux的高端嵌入式设备提供了完整的多进程支持 从而将MiniGUI从中端市场带到了高端市场 最新的MiniGUIV3 0则是继2 0之后的一个重要增强 增加了如外观渲染器技术 双向文本支持 透明控件 独立滚动条控件 UPF字体和位图字体等新的特性 7 1嵌入式GUI简介 10 7 1 3Microwindow TinyX等MicrowindowsOpenSourceProject成立的宗旨在于针对体积小的装置 建立一套先进的视窗环境 在Linux桌面上通过交叉编译可以很容易地制作出Microwindows的程序 Microwindows能够在没有任何操作系统或其他图形系统的支持下运行 它能对裸显示设备进行直接操作 这样 Microwindows就显得十分小巧 便于移植到各种硬件和软件系统上 然而Microwindows的免费版本进展一直很慢 几乎处于停顿状态 而且至今为止 国内没有任何一家对Microwindows提供全面技术支持 服务和担保的专业公司 TinyXServer是XFree86Project的一部分 由KeithPachard发展起来的 而他本身就是XFree86专案的核心成员之一 一般的XServer都过于庞大 因此KeithPackard就以XFree86为基础 精简而成TinyXServer 它的体积可以小到几百KB 非常适合应用于嵌入式环境 就纯XWindowSystem搭配TinyXServer架构来说 其最大的优点就是具有很好的弹性开发机制 并能大大提高开发速度 因为与桌面的X架构相同 因此相对于很多以Qt GTK FLTK等为基础开发的软件可以很容易地移植过来 7 1嵌入式GUI简介 11 常见GUI参数比较 7 1嵌入式GUI简介 12 7 2 1Qt Embedded介绍架构Qt Embedded以原始Qt为基础 并做了许多出色的调整以适用于嵌入式环境 Qt Embedded通过QtAPI与LinuxI O设施直接交互 成为嵌入式Linux端口 同Qt X11相比 Qt Embedded很省内存 因为它不需要一个X服务器或是Xlib库 它在底层抛弃了Xlib 采用framebuffer 帧缓冲 作为底层图形接口 同时 将外部输入设备抽象为keyboard和mouse输入事件 Qt Embedde的应用程序可以直接写内核缓冲帧 这避免开发者使用繁琐的Xlib Server系统 7 2Qt Embedded开发入门 Qt Embedded与QtX11的linux版本的比较 13 7 2 1Qt Embedded介绍Qt Embedded组件窗口系统字体输入设备机输入法Qt的开发环境 7 2Qt Embedded开发入门 14 7 2 1Qt Embedded介绍 Qt的开发环境Qt Embedded的开发环境可以取代那些我们熟知的UNIX和Windows开发工具 它提供了几个跨平台的工具使得开发变得迅速和方便 尤其是它的图形设计器 UNIX下的开发者可以在PC机或者工作站使用虚拟缓冲帧 从而可以模仿一个和嵌入式设备的显示终端大小 像素相同的显示环境 嵌入式设备的应用可以在安装了一个跨平台开发工具链的不同的平台上编译 最通常的做法是在一个UNIX系统上安装跨平台的带有libc库的GNUC 编译器和二进制工具 在开发的许多阶段 一个可替代的做法是使用Qt的桌面版本 7 2Qt Embedded开发入门 15 7 2 1Qt Embedded介绍 Qt的支撑工具qmake是一个为编译Qt Embedded库和应用而提供的Makefile生成器 它能够根据一个工程文件 pro 产生不同平台下的Makefile文件 qmake支持跨平台开发和影子生成 影子生成是指当工程的源代码共享给网络上的多台机器时 每台机器编译链接这个工程的代码将在不同的子路径下完成 这样就不会覆盖别人的编译链接生成的文件 qmake还易于在不同的配置之间切换 designer Qt图形设计器 可以使开发者可视化地设计对话框而不需编写代码 使用Qt图形设计器的布局管理可以生成能平滑改变尺寸的对话框 7 2Qt Embedded开发入门 16 7 2 2Qt Embedded信号和插槽机制机制概述信号和插槽机制是Qt的核心机制 信号和插槽是一种高级接口 应用于对象之间的通信 它是Qt的核心特性 也是Qt区别于其他工具包的重要地方 信号和插槽是Qt自行定义的一种通信机制 它独立于标准的C C 语言 因此要正确的处理信号和插槽 必须借助一个称为moc MetaObjectCompiler 的Qt工具 该工具是一个C 预处理程序 它为高层次的事件处理自动生成所需要的附加代码 7 2Qt Embedded开发入门 17 7 2 2Qt Embedded信号和插槽机制机制概述对象间信号与槽之间的关系 7 2Qt Embedded开发入门 18 7 2 2Qt Embedded信号和插槽机制信号与插槽的实现Qt的signals关键字指出进入了信号声明区 随后即可声明自己的信号 示例 signals voidmySignal voidmySignal intx voidmySignalParam intx inty 7 2Qt Embedded开发入门 19 7 2 2Qt Embedded信号和插槽机制信号与插槽的实现插槽是普通的成员函数 因此与其他的函数一样 它们也有存取权限 插槽的存取权限决定了谁能够与其相关联 同普通的C 成员函数一样 插槽函数也分为3种类型 即publicslots privateslots和protectedslots publicslots 在这个区内声明的槽意味着任何对象都可将信号与之相连接 这对于组件编程非常有用 用户可以创建彼此互不了解的对象 将它们的信号与槽进行连接以便信息能够正确地传递 protectedslots 在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接 这适用于那些槽 它们是类实现的一部分 但是其界面接口却面向外部 privateslots 在这个区内声明的槽意味着只有类自己可以将信号与之相连接 这适用于联系非常紧密的类 7 2Qt Embedded开发入门 20 7 2 2Qt Embedded信号和插槽机制信号与插槽的实现插槽也能够被声明为虚函数 这也是非常有用的 插槽的声明也是在头文件中进行的 示例 publicslots voidmySlot voidmySlot intx voidmySignalParam intx inty 7 2Qt Embedded开发入门 21 7 2 2Qt Embedded信号和插槽机制信号与槽关联通过调用QObject对象的connect 函数可以将某个对象的信号与另外一个对象的插槽函数或信号相关联 当发射者发射信号时 接收者的槽函数或信号将被调用 函数定义 boolQObject connect constQObject sender constchar signal constQObject receiver constchar member static 示例 QLabel label newQLabel QScrollBar scroll newQScrollBar QObject connect scroll SIGNAL valueChanged int label SLOT setNum int 7 2Qt Embedded开发入门 22 7 2 2Qt Embedded信号和插槽机制信号与信号关联classMyWidget publicQWidget public MyWidget signals voidaSignal private QPushButton aButton MyWidget MyWidget aButton newQPushButton this connect aButton SIGNAL clicked SIGNAL aSignal 7 2Qt Embedded开发入门 23 7 2 2Qt Embedded信号和插槽机制信号与信号关联当信号与槽没有必要继续保持关联时 用户可以使用disconnect 函数来断开连接 boolQObject disconnect constQObject sender constchar signal constObject receiver constchar member static 有3种情况必须使用disconnect 函数 断开与某个对象相关联的任何对象断开与某个特定信号的任何关联断开两个对象之间的关联 7 2Qt Embedded开发入门 24 7 2 2Qt Embedded信号和插槽机制信号与信号关联当信号与槽没有必要继续保持关联时 用户可以使用disconnect 函数来断开连接 boolQObject disconnect constQObject sender constchar signal constObject receiver constchar member static 有3种情况必须使用disconnect 函数 断开与某个对象相关联的任何对象断开与某个特定信号的任何关联断开两个对象之间的关联 7 2Qt Embedded开发入门 25 7 2 3搭建Qt Embedded开发环境安装Qt X11步骤解压源码包运行配置程序编译Qt源代码安装Qt设置环境变量 7 2Qt Embedded开发入门 26 7 2 3搭建Qt Embedded开发环境安装Qt X11步骤解压源码包 cd home user name tarzxvfqt x11 opensource src 4 4 3 tar gz 7 2Qt Embedded开发入门 27 7 2 3搭建Qt Embedded开发环境安装Qt X11运行配置程序 cdqt x11 opensource src 4 4 3 configure 7 2Qt Embedded开发入门 28 7 2 3搭建Qt Embedded开发环境安装Qt X11编译Qt源代码 make安装Qt makeinstall 7 2Qt Embedded开发入门 29 7 2 3搭建Qt Embedded开发环境安装Qt X11设置环境变量 vi HOME bash profileexportQTDIR usr local Trolltech Qt 4 4 3exportPATH QTDIR bin PATHexportLD LIBRARY PATH QTDIR lib LD LIBRARY PATH source HOME bash profile 7 2Qt Embedded开发入门 30 7 2 3搭建Qt Embedded开发环境安装Qt Embedded开发环境主机系统 Ubuntu8 10编译器版本 gcc g 4 1 3 arm linux gcc g 3 4 5内核源码 linux 2 6 26 5目标平台 s3c2410安装步骤解压源码包运行配置程序编译Qt Embedded源代码安装Qt Embedded设置环境变量复制库文件为开发板设置环境变量 7 2Qt Embedded开发入门 31 7 2 3搭建Qt Embedded开发环境安装Qt Embedded解压源码包 cd home user name tarzxvfqt embedded linux opensource src 4 4 3 tar gz 7 2Qt Embedded开发入门 32 7 2 3搭建Qt Embedded开发环境安装Qt Embedded运行配置程序 cdqt embedded linux opensource src 4 4 3 configure embeddedarm 7 2Qt Embedded开发入门 33 7 2 3搭建Qt Embedded开发环境安装Qt Embedded编译Qt Embedded源代码 make安装Qt Embedded makeinstall 7 2Qt Embedded开发入门 34 7 2 3搭建Qt Embedded开发环境安装Qt Embedded设置环境变量为了更方便的使用Qt Embedded提供的各种工具 同Qt X11一样 需要对用户的环境变量进行设置 如果前面已经把Qt X11的目录加入到PATH 那么在开发Qt Embedded程序时 最好保证将Qt Embedded的目录加在前面 因为现在使用的都是Qt Embedded中的工具 复制库文件 cp usr local Trolltech QtEmbedded 4 4 3 lib libQt rootfs home qt lib为开发板设置环境变量 7 2Qt Embedded开发入门 35 7 2 3搭建Qt Embedded开发环境安装Qt Embedded为开发板设置环境变量在开发板根文件系统的 bin目录下建立一个脚本文件qpe sh 用来设置环境变量 cd rootfs bin viqpe sh bin shexportQTDIR home qtexportLD LIBRARY PATH QTDIR lib LD LIBRARY PATH 7 2Qt Embedded开发入门 36 7 2 4Qt Embedded窗口部件Qt提供了一整套的窗口部件 它们组合起来可用于创建用户界面的可视元素 按钮 菜单 滚动条 消息框和应用程序窗口都是窗口部件的实例 窗口部件是QWidget或其子类的实例 用户自定义的窗口通过子类化得到 7 2Qt Embedded开发入门 37 7 2 4Qt Embedded窗口部件Hello窗口示例 include includeintmain intargc char argv QApplicationapp argc argv QLabel label newQLabel Hello Qt hello show returnapp exec 7 2Qt Embedded开发入门 38 7 2 4Qt Embedded窗口部件常见窗口组合 7 2Qt Embedded开发入门 39 7 2 4Qt Embedded窗口部件自定义窗口钟表部件是一个能显示当前时间并自动更新的LCD 一个冒号分隔符随秒数的流逝而闪烁 7 2Qt Embedded开发入门 40 7 2 4Qt Embedded窗口部件自定义窗口实现 clock h includeclassClock publicQLCDNumber public Clock QWidget parent 0 protected voidtimerEvent QTimerEvent event private voidshowTime boolshowingColon 7 2Qt Embedded开发入门 41 7 2 4Qt Embedded窗口部件自定义窗口实现 clock cpp include include clock h Clock Clock QWidget parent QLCDNumber parent showingColon true showTime startTimer 1000 voidClock timerEvent QTimerEvent showTime 7 2Qt Embedded开发入门 42 7 2 4Qt Embedded窗口部件voidClock showTime QStringtimer QTime currentTime toString left 5 if showingColon time 2 display time showingColon showingColon 7 2Qt Embedded开发入门 43 7 2 4Qt Embedded窗口部件自定义窗口实现 main cpp include include clock h intmain intargc char argv QApplicationapp argc argv Clock clock newClock clock show returnapp exec 7 2Qt Embedded开发入门 44 7 2 5Qt Embedded图形界面编程主窗口类QMainWindow类提供了一个典型应用程序的主窗口框架 示例 QTextEdit editor newQTextEdit mainWindow mainWindow setCentralWidget editor 7 2Qt Embedded开发入门 45 7 2 5Qt Embedded图形界面编程菜单类QMenu类以垂直列表的方式显示菜单项 它可以是单个的 例如上下文相关菜单 可以以菜单栏的方式出现 或者是别的弹出式菜单的子菜单出现 示例 QMenu menu F newQMenu 7 2Qt Embedded开发入门 46 7 2 5Qt Embedded图形界面编程工具栏QToolButton类实现了具有一个图标 一个3D框架和一个可选标签的工具栏 旁述提示栏actNew setStatusTip openafile 这是什么actNew setWhatsThis open 7 2Qt Embedded开发入门 47 7 2 5Qt Embedded图形界面编程动作应用程序通常提供几种不同的方式来执行特定的动作 比如 许多应用程序通过菜单 Flie Save 工具栏 像一个软盘的按钮 和快捷键 Ctrl S 来提供 Save 动作 QAction类封装了 动作 这个概念 它允许程序员在某个地方定义一个动作 示例 QMenu menu F newQMenu 7 2Qt Embedded开发入门 48 7 2 5Qt Embedded对话框设置布局内建布局管理器Qt提供了3种用于布局管理的类 QHBoxLayout QVBox Layout和QGridLayout QHBoxLayout布局管理把窗体按照水平方向从左至右排成一行 QVBoxLayout布局管理把窗体按照垂直方向从上至下排成一列 QGridLayout布局管理以网格的方式来排列窗体 一个窗体可以占据多个网格 7 2Qt Embedded开发入门 49 7 2 5Qt Embedded对话框设置布局三种布局管理器类示意图 7 2Qt Embedded开发入门 50 7 2 5Qt Embedded对话框设置布局如何微调布局设置一些延伸项目或间隔项目 延伸或间隔项目会填充空余的布局空间 改变子部件的尺寸策略 通过调用QWidget setSizePolicy 程序员可以仔细调整子部件的缩放行为 子部件可以设置为扩展 收缩 保持原大小等状态 改变子部件的建议大小 QWidget sizeHint 和QWidget minimumSizeHint 会根据内容返回部件的首选尺寸和最小首选尺寸 内建部件提供了合适的重新实现 设置延伸因子 延伸因子规定了子部件的相应增量 比如 2 3的可用空间分配给部件A而1 3分配给B 7 2Qt Embedded开发入门 51 7 2 5Qt Embedded对话框设置布局布局嵌套布局可以嵌套任意层 7 2Qt Embedded开发入门 52 7 2 5Qt Embedded对话框设置布局自定义布局通过子类化QLayout 开发者可以定义自己的布局管理器 和Qt一起提供的customlayout样例展示了三个自定义布局管理器 BorderLayout CardLayout和SimpleFlow 程序员可以使用并修改它们 7 2Qt Embedded开发入门 53 7 2 5Qt Embedded对话框设置Qt Embedded图形设计器Qt图形设计器是一个具有可视化用户接口的设计工具 Qt的应用程序可以完全用源代码来编写 或者使用Qt图形设计器来加速开发工作 启动Qt图形设计器的方法是 designer 7 2Qt Embedded开发入门 54 7 2 5Qt Embedded对话框设置建立对话框Qt为许多通用的任务提供了现成的包含了实用的静态函数的对话框类 主要有以下几种 QMessageBox类 是一个用于向用户提供信息或是让用户进行一些简单选择 例如 yes 或 no 的对话框类 QProgressDialog类 包含了一个进度栏和一个 Cancel 按钮QWizard类 提供了一个向导对话框的框架 7 2Qt Embedded开发入门 55 7 2 5Qt Embedded对话框设置建立对话框 7 2Qt Embedded开发入门 QProgressDialog类对话框QWizard类对话框 QMessageBox类对话框 56 使用Qt编写 Helloworld 程序实验目的 通过编写一个跳动的 Hello World 字符串 进一步熟悉嵌入式Qt的开发过程 7 3实验内容 57 1 安装配置Qt环境2 使用QtDesigner设计图形用户界面3 使用uic qmake等工具4 编写Qt程序 7 4小结 58 1 尝试在自己的pc上安装配置Qt环境 注意环境变量的设置 2 尝试使用QtDesigner设计一个简单的图形用户界面 并且将一些Qt预定义的信号与槽关联起来 3 尝试使用Qt提供的uic qmake等工具对上一题设计好的程序进行编译运行 注意需要编写main函数 4 尝试将 helloworld 程序移植到目标板上 并在LCD上察看其运行的效果 7 4思考与练习 59
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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