版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式应用程序设计第九章 Qt图形编程,习题,Qt/Embedded中信号和槽的概念分别是什么? 信号与槽的如何连接的?,Qt/Embedded中信号和槽的概念分别是什么?,答:信号(signal)和槽(slot)是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方。 当对象改变其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,对象并不知道另一端是谁在接收这个信号。这是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。 槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解
2、具体的通信机制。,信号与槽的如何连接的?,信号与槽的连接模型如下图所示: 通过调用QObject对象的connect函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。这个函数的作用就是将发射者sender对象中的信号signal与接收者receiver中的member槽函数联系起来。,5,熟悉信号与插槽的应用以及图形设计器的应用,本章课程:,Qt/Embedded的图形引擎实现基础是什么,其实现结构是怎样的?,Qt/Embedded的底层图形引擎是基于FrameBuffer之上的。FrameBuffer是在Linux内核架构版本2.2以后推出的
3、标准显示设备驱动接口。采用mmap系统调用,可以将FrameBuffer的显示缓存映射为可以连续访问的一段内存指针。 FrameBuffer驱动程序的实现分为两个方面:一方面是对LCD以及其相关部件的初始化,包括画面缓冲区的创建和对DMA通道的设置;另一方面是对画面缓冲区的读写,具体的代码为read、write、lseek等系统调用接口函数。至于将画面缓冲区的内容输入到LCD显示屏上,则是由硬件自动完成的,对于软件来说是透明的。,基于Qt/Embedded开发一个嵌入式应用的一般过程如下图所示。,应用软件开发工作基本上是在工作站或是PC机上完成的。在工作站或PC机上调试运行嵌入式应用,并将输出
4、结果显示在一个仿真小型设备显示终端的模拟器上。在开发的后期,要根据选择的嵌入式硬件平台,将嵌入式应用编译链接成适合在目标平台上运行的二进制目标代码。另外由于应用系统使用到了Qt/Embedded的库,所以还要对Qt/Embedded库的源代码进行交叉编译,然后链接成为适合在目标平台上使用的二进制目标代码库。当一个Qt/Embedded应用被下载到目标平台上,并能够可靠运行时,一个开发过程才宣告结束。,8,9.2.2 Qt/Embedded信号和插槽机制 信号与插槽的实现 (1)信号 Qt的signals关键字指出进入了信号声明区,随后即可声明自己的信号。 示例: signals: void m
5、ySignal(); void mySignal(int x); void mySignalParam(int x,int y);,9.2 Qt/Embedded开发入门,9,9.2.2 Qt/Embedded信号和插槽机制 (2)插槽 插槽是普通的成员函数,因此与其他的函数一样,它们也有存取权限。插槽的存取权限决定了谁能够与其相关联。同普通的C+成员函数一样,插槽函数也分为3种类型,即public slots、private slots和protected slots。 public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,用户可以创建彼此互
6、不了解的对象,将它们的信号与槽进行连接以便信息能够正确地传递。 protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。 private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。,9.2 Qt/Embedded开发入门,10,9.2.2 Qt/Embedded信号和插槽机制 示例: public slots: void mySlot(); void mySlot(int x); void mySignalParam(int x,int y);
7、,9.2 Qt/Embedded开发入门,11,9.2.2 Qt/Embedded信号和插槽机制 (3)信号与插槽关联 通过调用QObject对象的connect()函数可以将某个对象的信号与另外一个对象的插槽函数或信号相关联,当发射者发射信号时,接收者的槽函数或信号将被调用。 函数定义: bool QObject:connect (const QObject * sender, const char * signal,const QObject * receiver, const char * member) static,9.2 Qt/Embedded开发入门,12,9.2.2 Qt/Em
8、bedded信号和插槽机制 信号与插槽关联 定义了两个对象:标签对象label和滚动条对象scroll,并将valueChanged()信号与标签对象的setNum()插槽函数相关联,另外信号还携带了一个整型参数,这样标签总是显示滚动条所处位置的值。 示例: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect(scroll, SIGNAL(valueChanged(int),label, SLOT(setNum(int);,9.2 Qt/Embedded开发入门,9.2 Qt/Embe
9、dded开发入门,9.2.2 Qt/Embedded信号和插槽机制 信号与信号相关联 MyWidget创建了一个私有的按钮aButton,按钮的单击事件产生的信号clicked()与另外一个信号aSignal()进行关联。这样,当信号clicked()被发射时,信号aSignal()也接着被发射。,举例,class MyWidget : public QWidget public: MyWidget(); . signals: void aSignal(); . private: . QPushButton *aButton; ; MyWidget:MyWidget() aButton = n
10、ew QPushButton(this); connect(aButton, SIGNAL(clicked(), SIGNAL(aSignal(); ,15,9.2.2 Qt/Embedded信号和插槽机制 (4)解除信号与插槽关联 当信号与槽没有必要继续保持关联时,用户可以使用disconnect()函数来断开连接。 bool QObject:disconnect (const QObject * sender, const char * signal,const Object * receiver, const char * member) static 有3种情况必须使用disconne
11、ct()函数: 断开与某个对象相关联的任何对象 断开与某个特定信号的任何关联 断开两个对象之间的关联,9.2 Qt/Embedded开发入门,16,9.2.4 Qt/Embedded窗口部件 Qt提供了一整套的窗口部件。它们组合起来可用于创建用户界面的可视元素。按钮、菜单、滚动条、消息框和应用程序窗口都是窗口部件的实例。 窗口部件是QWidget或其子类的实例,用户自定义的窗口通过子类化得到。,9.2 Qt/Embedded开发入门,17,9.2.4 Qt/Embedded窗口部件 Hello窗口示例 #include #include int main(int argc, char *arg
12、v) QApplication app(argc, argv); QLabel *label = new QLabel(Hello Qt!); hello-show(); return app.exec(); ,9.2 Qt/Embedded开发入门,18,9.2.4 Qt/Embedded窗口部件 常见窗口组合,9.2 Qt/Embedded开发入门,19,9.2.4 Qt/Embedded窗口部件 自定义窗口 钟表部件是一个能显示当前时间并自动更新的LCD。一个冒号分隔符随秒数的流逝而闪烁,9.2 Qt/Embedded开发入门,20,9.2.6 Qt/Embedded对话框设计 Qt/Embedded图形设计器 Qt图形设计器是一个具有可视化用户接口的设计工具。Qt的应用程序可以完全用源代码来编写,或者使用Qt图形设计器来加速开发工作。启动Qt图形设计器的方法是: ./designer,9.2 Qt/Embedded开发入门,21,9.2.5 Qt/Embedded对话框设置 建立对话框 Qt为许多通用的任务提供了现成的包含了实用的静态函数的对话框类,主要有以下几种。 QMessageBox类:是一个用于向用户提供信息或是让用户进行一些简单选择(例如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 4789.9-2025食品安全国家标准食品微生物学检验空肠弯曲菌和结肠弯曲菌检验
- 2025年AI客服训练师:跨业务知识整合训练策略
- 医学心理学与人文医疗创新模式优化
- 医学心理学与精准人文医疗
- 个人宅基地转让合同协议书
- 广西艺术学院《战略管理》2024 - 2025 学年第一学期期末试卷
- 主题班会对学生教育效果分析
- 医学影像分割的深度学习算法选择
- 个人大学职业规划
- 医学影像AI验证结果的空间分布可视化
- 亳州市招聘警务辅助人员考试真题及答案
- 寿春中学师德师风考核制度
- 2026年南宁职业技术学院单招职业适应性测试题库及答案详解(网校专用)
- 2026年春青岛版(五四制)(新教材)小学科学二年级第二学期教学计划及进度表
- 2025-2030中国钐钴永磁市场深度调研及发展前景趋势预测研究报告
- 2026年社工证考试试题及答案
- 2026年春期人教版二年级下册数学全册教案(核心素养教案)
- 旗委办主任选人用人不正之风集中整治研讨发言材料
- 三年(2023-2025)山东中考语文真题分类汇编:专题05 名著阅读(解析版)
- 2025年贵州省省考面试真题(附答案)
- 《传感器与检测技术》课件-热电阻测温传感器
评论
0/150
提交评论