版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统的图形用户界面1预习检查嵌入式平台有哪些主流的GUI?QT的特点是哪些?信号和插槽的概念?22本章目标熟悉嵌入式平台下主流GUI掌握嵌入式QT的组成结构和特点掌握一个简单QT程序掌握布局和按钮控件3本章结构嵌入式系统的图形用户界面图形用户界面QT/Embedded应用程序框架
信号和插槽程序框架和示例控件示例4常见的LinuxGUI工具XWindows(UNIX/Linux)QtGTKClutterJava(Android)DirectFBMiniGUIMicroWindows/NanoXOpenGL/OpenglES图形用户界面5QT-C++图形用户界面库
Qt是一个跨平台的C++图形用户界面应用程序框架,由Nokia公司出品。目前产品包括Qt、Qt/Embedded、快速开发工具QtDesigner、国际化工具QtLinguist等部分。Qt支持Unix,Linux,Windows,WinCE,Symbian平台Qt是基于面向对象的C++语言,它提供了信号(signal)和槽(slot)的对象通信机制,具有可查询和可设计的属性,以及强大的事件和事件过滤器。同时,它还具有字符国际化,即支持根据上下文进行国际化字符串翻译。许多Qt特性基于QObject的继承,通过标准C++技术实现6Qt的本质是一些应用程序库,它以动态库,静态库和头文件的形式给出.Qt是跨平台库支持平台包括Linux,MacOS,windows,嵌入式Linux,windowsCE,Symbian,提供C++语言接口.建议先不要使用QtCreator、QDesigner这些集成开发环境,而应该直接学习Qt库中类的使用,以知其所以然.QT/Embedded简介7QT特点优良的跨平台特性面向对象Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好
丰富的APIQt包括多达400个以上的C++类,同时不断扩展支持2D/3D图形渲染,支持OpenGLXML支持开放源码8Qt程序结构//main.cpp#include<QApplication>#include<QtGui>intmain(intargc,char*argv[]){
//每个程序都要有一个QApplication对象 QApplicationapp(argc,argv); QWidgetwin;//创建窗口对象 win.show();//显示窗口 returnapp.exec();//进入事件循环}//事件循环是响应鼠标输入、信号槽的基础9创建工程文件的和可执行文件qmake-project //生成工程文件.proqmake //qmake分析源文件生成Makefilemake //执行Makefile编译10QObject类Object类是所有Qt对象的唯一基类QObject是对象模型的中心,这个模型的中心特征就是一种用于无缝对象通讯的被叫做信号和槽的非常强大的机制QObject把它们自己组织在对象树中。当你创建一个QObject作为其它对象的父对象,这个对象会在父对象中自动调用insertChild()并且可以在父对象的children()列表中显示出来事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。11QApplication类
QApplication类管理图形用户界面应用程序的控制流和主要设置它包含主事件循环,负责处理和调度所有来自窗口系统和其他资源的事件,
处理应用程序的开始、结束以及会话管理系统和应用程序方面的设置12QWidget类
QWidget类是所有用户界面对象的基类,它继承了QObject类的属性。窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件是子窗口部件。它们是它们的父窗口部件中的子窗口。你通常不能在视觉角度从它们的父窗口部件中辨别一个子窗口部件。13布局使用Qt的布局管理类:这些类能够给出所有类型控件的默认值,能够根据控件的字体,样式,内容得到不同的控件的sizeHint。布局管理类能够得到控件的最大,最小尺寸,在字体,内容或者窗口改变时自动调整布局。QHBoxLayout,QVBoxLayout,QGridLayout是三个最重要的布局管理器。这些类从QLayout继承,QLayout提供布局最基本的框架。14实现对象间通信的技术用户事件:指程序的用户所产生的事件,例如:点击鼠标程序事件:指程序所产生的事件,例:当用户点击鼠标后程序退出发射信号:“发出”一个信号。例:当你点击鼠标时,将发射(clicked)信号,为了发射信号,使用emit关键字MOC:元对象编译器,用于构造用户自己的信号和槽信号和插槽机制15插槽:是标准的成员函数(作为类成员的函数),但是增加了一些特殊的功能使它们能够连接到信号,每当槽所连接的信号被发射时,槽(函数)就被执行。信号:一种特殊的成员函数,它们被定义为当某个事件发生时就被发射,之后执行所有被连接的槽使用信号和插槽非常简单,只需要编写一行代码就能够将用户事件和程序事件连接起来 connect(sender,SIGNAL(signal),receiver,SLOT(slot));信号和插槽机制16信号和插槽机制在Qt中大多数类都继承自QObject,继承自它的类都支持信号与槽机制。信号与槽泛泛的说就是一种对象间的通信机制,一个对象发送信号,会导致另一个对象的槽函数被调用,槽函数是一个对象的成员函数。哪个对象的信号触发哪个对象的槽函数需要由connect函数事先绑定。信号是一个没有函数体的成员函数,有点类似消息或纯虚函数(但不是纯虚函数)。在Qt中信号与槽都可以由程序员自定义,许多Qt已有的类中已经定义有信号与槽。17一个信号可以被连接到多个槽connect(inputBox,SlGNAL(valueChanged(int)),staticBox,SLOT(setValue(int)));connect(inputBox,SIGNAL(vaIueChanged(int)),okButton,SLOT(setTittIe(int)));信号和插槽机制18信号和插槽机制多个信号可以被连接到一个槽connect(doPlusBox,SIGNAL(overflow()),this,SLOT(mathError()));connect(doMinusBox,SIGNAL(lessZero()),this,SLOT(mathError0));19信号和插槽机制一个信号可以被连接到另外一个信号connect(lineEdit,SIGNAL(textChanged()),this,SIGNAL(updateRecord());连接可以随时移除disconnect(doPlusBox,SIGNAL(overflow()),this,SLOT(mathError()));20以下是一个信号与槽的连接图信号和插槽机制21控件和功能类示例模拟液晶时钟布局示例各种按钮22模拟液晶时钟
QLCDNumber控件显示一个LCD数字风格的文字QLCDNumber窗口部件能够在LCD上面显示十进制、十六进制、八进制、二进制的数字。可以利用display()槽与数据源进行连接,能够重载五个任意类型的display()。改变LCD的显示范围,可以通过调用函数setNumDigits()来完成。显示十六进制、八进制、二进制、十进制的数值,您就可以调用函数setHexMode()
、setOctMode()、setBinMode()、
setDecMode()来将其设置。23各种按钮推动按钮单选按钮复选按钮24推动按钮Qt的组件推动按钮的描述
推动或者命令按钮是任何GUI(图形用户界面)中最常用的窗口部件,它来命令计算机执行一些操作,或者回答一个问题。典型的按钮有确定(OK)、应用(Apply)、撤消(Cancel)、关闭(Close)、是(Yes)、否(No)和帮助(Help)等。
该按钮是矩形的,并且通常显示一个文本标签来描述它的操作。标签中有下划线的字母(在此它的前面用“&”标明)表明快捷键,比如:QPushButton*pushbutton=newQPushButton("&Help",this); 这个实例中快捷键是Alt+H,并且文本标签将被显示为Help。25推动按钮推动按钮的成员QPushButton(QWidget*parent=0)构造一个没有文本的推动按钮,参数为parent。QPushButton(constQString&text,QWidget*parent=0)构造一个父对象为parent、文本为text的推动按钮。QPushButton(constQIcon&icon,constQString&text,QWidget*parent=0)构造一个图标为icon、文本为text、父对象为parent的推动按钮。注意:您可以传递一个QPixmap作为一个图标(感谢由C++提供的隐含类型转换)。26推动按钮QPushButton()销毁这个推动按钮。voidQButton::setText(constQString&)设置这个按钮上显示的文本。voidQButton::pressed()当这个按钮被按下的时候,将要发射该信号。voidQPushButton::setMenu(QMenu*menu)这个按钮与弹出式的菜单menu联系在一起。这样就可以把一个普通的按钮变成菜单按钮,在该按钮的文本的右边会出现一个倒置的小三角。27推动按钮推动按钮的实例 该实例的功能,当您按下退出按钮的时候,就会退出系统。以下是该实例的代码:/*main.cpp*/#include<QApplication>//当窗口初始化的时候,引用的头文件#include<QPushButton>//定义QPushButton对象,引用的头文件intmain(intargc,char**argv){QApplicationapp(argc,argv);//窗体初始化QPushButton*pushbutton=newQPushButton("Quit");QObject::connect(pushbutton,SIGNAL(clicked()),pushbutton,SLOT(close()));pushbutton->show();//显示该窗体returnapp.exec();}运行该实例的结果,如图所示:28单选按钮单选按钮的描述 QRadioButton窗口部件为单选按钮提供了一个文本标签。 QRadioButton是一个能够切换开(选择)或者关(没有选择)的选择按钮。通常单选按钮是用于当前用户选择许多中的一个选项。在同一时刻,单选按钮组中仅仅只有一个按钮被选择;如果用户选择其他按钮,以前选择的按钮将要切换为关闭状态。 当一个按钮切换开或者关的时候,它就会发射toggled()信号。如果任何时刻你想触发一个行为来改变按钮的状态的时候,可以连接这个信号。否则,使用isChecked()来查看是否有其他按钮被选择。像上述的QPushButton一样,单选按钮能够显示文本和可选择的小图标。文本能够在构造函数中被设置,或者使用setText()函数;设置图标可以使用setIcon()函数来设置。29单选按钮单选按钮的成员QRadioButton::QRadioButton(QWidget*parent=0)构造一个单选按钮的窗口组件,但是该组件没有文本或者图象映射。parent参数传递给QAbstractButton构造函数。QRadioButton::QRadioButton(constQString&text,QWidget*parent=0)构造一个单选按钮的窗体组件,该组件的参数为parent和text字符串。parent参数传递给QAbstractButton构造函数。30复选按钮复选按钮的描述QCheckBox窗口部件提供一个带文本标签的复选按钮。QCheckBox和QRadioButton都是选项按钮。QCheckBox能够在开(选中)或者关(未选中)之间切换。QCheckBox和QRadioButton的区别是在于对用户选择的限制。单选按钮定义了“多选一”的选择,而复选按钮定义了“多选多”的选择。QButtonGroup在视觉上能够把许多的复选按钮组合在一起,成为一个按钮组。 无论复选按钮选中或者是未选中,它都会发射一个信号toggled()。在任何时刻,如果您想改变复选按钮的状态的时候,需要连接toggled()信号触发这个行为。您也可以利用isChecked()函数来查询复选按钮是否被选中。31复选按钮 除了常用的选中和未选中两个状态,QCheckBox还可以任意选择第三种状态来表明“没有改变”。当您需要给用户一个选中或者未选中复选按钮的选择时,这是非常有用的。如果您需要第三种状态,可以通过setTristate()来使它生效,利用checkState()函数来查询当前的切换状态。 与QPushButton一样,复选按钮可以显示文本或者任意的小图标。文本可以通过构造函数或者setText()来设置,图标可以通setIcon()来设置。32复选按钮复选按钮的成员QCheckBox::QCheckBox(QWidget*parent=0)构造一个参数为parent的复选按钮,但是该按钮不显示文本信息。parent参数传递给QAbstractButton构造函数。QCheckBox::QCheckBox(constQString&text,QWidget*parent=0)构造一个参数为paren
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全身多处骨折护理
- 公司级安全培训课件
- 前台员工服务意识培训
- 《责任心培训教材》课件
- 2024服装合同书范文
- 2024中外专利技术许可合同合同范本
- 2024商铺租赁合同(范本)
- 2024年邻硝基苯酚项目评估分析报告
- 2024至2030年中国重型九脚塑料托盘行业投资前景及策略咨询研究报告
- 2024至2030年中国高光透明面漆行业投资前景及策略咨询研究报告
- XXXX年度煤矿机电设备检修计划
- 公路水运实验检测专业能力评价考试题库及答案
- 火力发电厂机组修前技术分析报告
- 南京林业大学考研811植物生理学历年真题及答案
- Excel水力计算展示-消力坎式消力池水力计算演示
- Ansys作业-瞬态热分析报告
- GB/T 42260-2022磷酸铁锂电化学性能测试循环寿命测试方法
- 门诊突发事件处理预案与流程
- VMI库存管理的课件资料
- 2023年X省中小河流治理工程《堤防工程监理工作报告》范本
- 二次函数与一元二次方程、不等式大单元教学设计方案
评论
0/150
提交评论