嵌入式系统的图形用户界面

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信号和插槽机制
在Qt中大多数类都继承自QObject,继承自它的类都支 持信号与槽机制。 信号与槽泛泛的说就是一种对象间的通信机制,一个 对象发送信号,会导致另一个对象的槽函数被调用, 槽函数是一个对象的成员函数。哪个对象的信号触发 哪个对象的槽函数需要由connect函数事先绑定。信号 是一个没有函数体的成员函数,有点类似消息或纯虚 函数(但不是纯虚函数)。 在Qt中信号与槽都可以由程序员自定义,许多Qt已有 的类中已经定义有信号与槽。



信号和插槽机制
一个信号可以被连接到多个槽 connect(inputBox, SlGNAL(valueChanged(int)), staticBox,SLOT(setValue(int))); connect(inputBox, SIGNAL(vaIueChanged(int)), okButton, SLOT(setTittIe(int)));
Qt是一个跨平台的C++图形用户界面应用程序框架 ,由 Nokia公司出品。 目前产品包括Qt、Qt/Embedded、快速开发工具Qt Designer、国际化工具Qt Linguist等部分。 Qt支持Unix,Linux,Windows,WinCE,Symbian平台 Qt是基于面向对象的C++语言,它提供了信号(signal)和槽 (slot)的对象通信机制,具有可查询和可设计的属性,以及 强大的事件和事件过滤器。同时,它还具有字符国际化, 即支持根据上下文进行国际化字符串翻译。许多Qt特性基 于QObject的继承,通过标准C++技术实现
推动按钮
推动按钮的实例 该实例的功能,当您按下退出按钮的时候,就会退出系统。 以下是该实例的代码:
/* main.cpp */ #include <QApplication> //当窗口初始化的时候,引用的头文件 #include <QPushButton> //定义QPushButton对象,引用的头文件 int main(int argc,char **argv) { QApplication app(argc,argv); //窗体初始化 QPushButton *pushbutton = new QPushButton("Quit"); QObject::connect(pushbutton,SIGNAL(clicked()),pushbutton,SLOT(close())); pushbutton->show();//显示该窗体 return app.exec(); } 运行该实例的结果,如图所示:
窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其 它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形, 并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或 者它前面的窗口部件盖住一部分。 QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承 来使用其函数功能。如,QPushButton、QlistBox等都是它的子类 一个没有父窗口部件的窗口部件一直是顶级窗口部件。 非顶级窗口部件是子窗口部件。它们是它们的父窗口部件中的子窗口 。你通常不能在视觉角度从它们的父窗口部件中辨别一个子窗口部件 。
嵌入式系统的图形用户界面
预习检查
嵌入式平台有哪些主流的GUI? QT的特点是哪些? 信号和插槽的概念?
2
本章目标
熟悉嵌入式平台下主流GUI 掌握嵌入式QT的组成结构和特点 掌握一个简单QT程序 掌握布局和按钮控件
本章结构
图形用户界面
应用程序框架
QT/Embedded 信号 和插槽 程序框架和示例 控件示例
QT特点
优良的跨平台特性 面向对象
Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好
丰富的API
Qt 包括多达400个以上的 C++ 类,同时不断扩展
支持 2D/3D 图形渲染,支持 OpenGL XML 支持 开放源码
Qt程序结构
//main.cpp #include <QApplication> #include <QtGui> int main(int argc, char* argv[]) { //每个程序都要有一个QApplication对象 QApplication app(argc, argv); QWidget win; //创建窗口对象 win.show(); //显示窗口 return app.exec(); //进入事件循环 }//事件循环是响应鼠标输入、信号槽的基础
QT/Embedded简介
Qt的本质是一些应用程序库, 它以动态库,静态库和头文件 的形式给出. Qt是跨平台库支持平台包括Linux, Mac OS, windows,嵌 入式Linux, windows CE, Symbian, 提供C++语言接口. 建议先不要使用QtCreator、QDesigner这些集成开发环境 , 而应该直接学习Qt库中类的使用,以知其所以然.
Qt的组件
推动按钮
推动按钮的成员 QPushButton ( QWidget * parent = 0 ) 构造一个没有文本的推动按钮,参数为parent。 QPushButton ( const QString & text, QWidget * parent = 0 ) 构造一个父对象为parent、文本为text的推动按钮。 QPushButton ( const QIcon & icon, const QString & text, QWidget * parent = 0 ) 构造一个图标为icon、文本为text、父对象为parent的推动按钮。 注意:您可以传递一个QPixmap作为一个图标(感谢由C++提供的隐含类 型转换)。
信号和插槽机制
一个信号可以被连接到另外一个信号 connect(lineEdit, SIGNAL(textChanged()), this, SIGNAL(updateRecord()); 连接可以随时移除
disconnect(doPlusBox, SIGNAL(overflow()), this, SLOT(mathError()));
布局
使用Qt的布局管理类 :
这些类能够给出所有类型控件的默认值,能够根据控件的字体,样式 ,内容得到不同的控件的sizeHint。布局管理类能够得到控件的最大 ,最小尺寸,在字体,内容或者窗口改变时自动调整布局。 QHBoxLayout,QVBoxLayout,QGridLayout是三个最重要的布局管 理器 。这些类从QLayout继承,QLayout提供布局最基本的框架。
信号和插槽机制
多个信号可以被连接到一个槽 connect(doPlusBox, SIGNAL(overflow()), this, SLOT(mathError())); connect(doMinusBox, SIGNAL(lessZero()), this, SLOT(mathError0));
信号和插槽机制
以下是一个信号与槽的连接图
控件和功能类示例
模拟液晶时钟 布局示例
各种按钮
模拟液晶时钟
QLCDNumber 控件显示一个LCD数字风格的文字
QLCDNumber窗口部件能够在LCD上面显示十进制、十六进制、八 进制、二进制的数字。可以利用display()槽与数据源进行连接,能够 重载五个任意类型的display()。 改变LCD的显示范围,可以通过调用函数setNumDigits()来完成。 显示十六进制、八进制、二进制、十进制的数值,您就可以调用函数 setHexMode() 、setOctMode()、 setBinMode()、 setDecMode()来 将其设置。
信号和插槽机制
实现对象间通信的技术 用户事件:指程序的用户所产生的事件,例如:点击 鼠标
程序事件:指程序所产生的事件,例:当用户点击鼠 标后程序退出 发射信号:“发出”一个信号。例:当你点击鼠标时 ,将发射(clicked)信号,为了发射信号,使用emit关键 字
MOC:元对象编译器,用于构造用户自己的信号和槽
创建工程文件的和可执行文件
qmake -project
//生成工程文件.pro
qmake
make
//qmake分析源文件生成Makefile
//执行Makefile编译
QObject类
Object类是所有Qt对象的唯一基类
QObject是对象模型的中心 ,这个模型的中心特征就是一种用于无缝对 象通讯的被叫做信号和槽的非常强大的机制 QObject把它们自己组织在对象树中。当你创建一个QObject作为其它 对象的父对象,这个对象会在父对象中自动调用insertChild()并且可 以在父对象的children()列表中显示出来 事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用 户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗 口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重 绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些, 比如定时器等,是由系统独立产生的。
推动按钮
QPushButton () 销毁这个推动按钮。 void QButton::setText ( const QString & ) 设置这个按钮上显示的文本。 void QButton::pressed () 当这个按钮被按下的时候,将要发射该信号。 void QPushButton::setMenu ( QMenu * menu ) 这个按钮与弹出式的菜单menu联系在一起。这样就可以把一个普通的 按钮变成菜单按钮,在该按钮的文本的右边会出现一个倒置的小三角。
QApplication类
QApplication类管理图形用户界面应用程序的控制流和主要 设置
它包含主事件循环,负责处理和调度所有来自窗口系统和 其他资源的事件,
处理应用程序的开始、结束以及会话管理
系统和应用程序方面的设置
QWidget类
QWidget类是所有用户界面对象的基类,它继承了QObject 类的属性。
信号和插槽机制
插槽:是标准的成员函数(作为类成员的函数),但 是增加了一些特殊的功能使它们能够连接到信号,每 当槽所连接的信号被发射时,槽(函数)就被执行。 信号:一种特殊的成员函数,它们被定义为当某个事 件发生时就被发射,之后执行所有被连接的槽 使用信号和插槽非常简单,只需要编写一行代码就能 够将用户事件和程序事件连接起来 connect( sender, SIGNAL(signal), receiver, SLOT(slot) );
嵌入式系统的 图形用户界面
图形用户界面 常见的Linux GUI 工具
X Windows(UNIX/Linux) Qt GTK Clutter Java (Android) DirectFB MiHale Waihona Puke BaiduiGUI MicroWindows/NanoX OpenGL/OpenglES
QT- C++图形用户界面库
各种按钮
推动按钮 单选按钮 复选按钮
推动按钮
推动按钮的描述 推动或者命令按钮是任何GUI(图形用户界面)中最常用的窗口部件, 它来命令计算机执行一些操作,或者回答一个问题。典型的按钮有确定 (OK)、应用(Apply)、撤消(Cancel)、关闭(Close)、是(Yes)、否(No)和 帮助(Help)等。 该按钮是矩形的,并且通常显示一个文本标签来描述它的操作。标 签中有下划线的字母(在此它的前面用“&”标明)表明快捷键,比如: QPushButton *pushbutton = new QPushButton("&Help", this); 这个实例中快捷键是Alt+H,并且文本标签将被显示为Help。
单选按钮
单选按钮的描述 QRadioButton窗口部件为单选按钮提供了一个文本标签。 QRadioButton是一个能够切换开(选择)或者关(没有选择)的选择按钮 。通常单选按钮是用于当前用户选择许多中的一个选项。在同一时刻, 单选按钮组中仅仅只有一个按钮被选择;如果用户选择其他按钮,以前 选择的按钮将要切换为关闭状态。 当一个按钮切换开或者关的时候,它就会发射toggled()信号。如果任 何时刻你想触发一个行为来改变按钮的状态的时候,可以连接这个信号。 否则,使用isChecked()来查看是否有其他按钮被选择。像上述的 QPushButton一样,单选按钮能够显示文本和可选择的小图标。文本能 够在构造函数中被设置,或者使用setText()函数;设置图标可以使用 setIcon()函数来设置。
相关文档
最新文档