QT5开发之 信号与槽机制
文章目录
- 什么是信号与槽?
- 信号与槽原理
- 如何实现信号与槽机制?
- 实现方式
- UI方式
- 代码方式(QT4)
- QObject类:connect和disconnect 连接函数(QT4+QT5使用)
- 找到类与类的信号与槽函数(QT4+QT5使用)
- 举例
- 总结
- 代码方式(QT5)
- 举例
- 总结
- Lambda方式
- 自定义方式
- 总结自定义信号和槽函数的特征
- 函数指针方式
什么是信号与槽?
通俗理解信号就是发送的某种动作或特征的表现形式。槽就是响应信号的响应动作。
场景一:十字路口信号灯
场景二 PowerPoint按键
- 连接函数:信号与槽的绑定。要考虑发送信号的实例特征与接收信号的实例特征。即
哪个灯,什么动作,哪辆车
这些问题。 - 槽函数:信号的响应动作函数。
- 对应关系:一对多,多对一,多对对,一对一。
信号与槽原理
信号与槽时用于对象之间的通信,是Qt的核心。
信号与槽不是C++标准代码,是QT特有的。会通过
MOC
(Mete-Objeci Compiler)进行重新编译为C++。
MOC编译流程
QT程序 | C++语法文件(MOC得到)+源码C++文件 | C++编译器 | 二进制文件 |
---|
如何实现信号与槽机制?
实现方式
UI方式
利用控件和信号与槽编辑器。
步骤
- 方式一:
新建控件->右键控件(转到槽)->选择信号->编辑槽函数;
- 方式二:
新建控件->在信号与槽编辑器中选择发送者,信号,接收者和槽函数。
好处:操作方便
坏处: 看不到连接函数等详细步骤,处理复杂逻辑不适用。
代码方式(QT4)
QObject类:connect和disconnect 连接函数(QT4+QT5使用)
在QObject 类中有一个Public Function为connect函数。
以及Static Public Menbers有大量重载的connect函数。
找到类与类的信号与槽函数(QT4+QT5使用)
如QWidget类,即界面类。
找到他发出的信号与他的槽函数入如下:
举例
connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(close()));
解释:
发送方:ui->pushButton_3
发送信号:clicked();
接收对象: this即改界面QWidget类实例。
接收槽函数:close();//退出
总结
好处:信号与槽比较直观
坏处:
使用宏定义时,如果存在错误,在编译阶段不会报错,运行阶段会报错。
运行
connect(ui->pushButton_3,SIGNAL(click()),this,SLOT(close()));
clicked变成click就会报错。
使用宏定义时,宏定义里面的参数,不能加参数名,只能加参数类型。
运行
connect(ui->pushButton_3,SIGNAL(clicked(bool check )),this,SLOT(close()));
就会报错,改成connect(ui->pushButton_3,SIGNAL(clicked(bool)),this,SLOT(close()));
就可以。
代码方式(QT5)
举例
connect(ui->pushButton_4,&QPushButton::clicked,this,&QWidget::close);
总结
好处:能完美解决QT4的问题
坏处:
信号和槽函数不能传参
解决:自定义槽函数,信号方式(针对QT5不能传参的问题)
改进一:将槽函数入口自定义:(QT4不支持)
connect(ui->pushButton_4,&QPushButton::clicked,this,&QtDesigner::customSlot);
void QtDesigner::customSlot(){this->close();
}
Lambda方式
connect(ui->pushButton_5,&QPushButton::clicked,this,[=](){this->close();});
自定义方式
//自定义
connect(ui->pushButton_6,&QPushButton::clicked,this,[=](){emit customSignal();//触发信号
}); connect(this,&QtDesigner::customSignal,this,&QtDesigner::customSlot);void QtDesigner::customSlot(){this->close();
}
其中ui实例中的定义包含:
signals:void customSignal(); //仅声名,未定义。
private slots:void customSlot();
总结自定义信号和槽函数的特征
- 自定义信号函数
- 关键字前面不要加访问控制符private,public,protected
- 只需要声名,不需要定义。使用emit激活信号
- 返回类型为void
- 自定义槽函数特征
- 关键字前面要加访问控制符private,public,protected
- 需要声名和定义。
- 返回类型为void
函数指针方式
//函数指针void(QtDesigner::*closeui)() = &QtDesigner::customSlot;connect(ui->pushButton_7,&QPushButton::clicked,this,closeui);
QT5开发之 信号与槽机制相关推荐
- QT5开发及实例学习之二信号和槽机制
文章目录 前言 一.信号与槽机制的连接方式 二.信号与槽机制的优点 三.信号与槽机制的效率 前言 Qt提供了信号和槽机制用于完成界面操作的响应,信号和槽机制是完成任意两个Qt对象之间的通信机制.其中, ...
- QT 的信号与槽机制介绍
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
- 【qt】QT 的信号与槽机制
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
- 【转载】QT 的信号与槽机制介绍
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
- qt学习之路3 ---信号与槽机制
信号和槽机制 1.概述 Qt采用了一种全新的对象和方法的关联与通信机制,称为信号和槽机制.信号和槽机制是独立于标准C++编译器的,在编译之前需要经过Qt的专门预处理工具MOC(Meta Object ...
- QT信号与槽机制需要注意的问题
1.信号与槽的效率是非常高的,但是同真正的回调函数比较起来,由于增加了灵活性,因此在速度上还是有所损失.当然这种损失相对来说是比较小的,但是要追求高效率的话,比如实时系统,就要尽可能避免. 2.信号与 ...
- QT每日一练day8:信号与槽机制
一. 创建一个空的项目 添加QT的支持 添加main.cpp 编译报错,Q_OBJECT放在CPP文件中会报这个错误,必需放头文件,这个宏比较特殊,只有放头文件才能展开 添加头文件test.h mai ...
- QT从入门到入土(三)——信号和槽机制
摘要 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal).这种发出是没有目的的,类似广播 ...
- Qt源码分析之信号和槽机制
Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的 说法,简单点说就是如何在一个类的一 ...
最新文章
- C++容器(三):pair类型
- webpack/gulp的z-index被改写
- 认识探头(一) (转)
- Android学习四、Android中的Adapter
- OpenVINO Inference Engine之GetAvailableDevices
- python程序设计与应用第2章实验
- “操作系统不以 C 开头和结尾,C 不等于整个世界”
- 淘宝中间件借阿里云对外 日均调千亿次
- 阅读邮件回复邮件计算机操作题,《电子邮件》阅读练习题附答案
- python京东预约抢购流程_[Python] 京东秒杀商品抢购-茅台抢购自动获取抢购时间【修改】...
- java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...
- 想学PHP来兄弟连是正确的选择 初识兄弟连三周
- php 过滤微信符号昵称,PHP处理微信昵称特殊符号过滤方法
- 使用NoteExpress/Citespace/VOSviewer/EndNote进行CNKI文献计量分析
- Mojibakes来自哪里? 编码要点
- linux mysql5.7 安装、 开机启动
- 基于JAVASE的彩票摇号系统
- 如何自学UI设计?如何成为UI设计师?
- python 生成随机邮箱
- 市场调研—全球及中国腹主动脉瘤(AAA)瓣膜假体行业研究及十四五规划分析报告